免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 8688 | 回复: 15

[C++] 哪位大牛能推荐一个高性能的开源UDP服务器? [复制链接]

论坛徽章:
12
2015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之同曦
日期:2017-03-17 19:13:162016科比退役纪念章
日期:2016-11-07 08:28:12luobin
日期:2016-06-17 17:46:36wusuopu
日期:2016-06-17 17:43:4515-16赛季CBA联赛之福建
日期:2016-01-14 12:49:22程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2015-06-08 22:20:00程序设计版块每日发帖之星
日期:2015-06-08 22:20:002015年亚洲杯之科威特
日期:2015-03-24 14:21:272015年迎新春徽章
日期:2015-03-04 09:57:092016科比退役纪念章
日期:2018-04-10 16:20:18
发表于 2015-03-23 09:44 |显示全部楼层
RT。

我们现在的UDP 服务器处理能力太差,提不上去,想找个东西参考一下。或者有什么资料也行。

论坛徽章:
323
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
发表于 2015-03-23 09:49 |显示全部楼层
UDP本身没多少好优化的,这个还是分析瓶颈,再针对性解决为好。

论坛徽章:
12
2015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之同曦
日期:2017-03-17 19:13:162016科比退役纪念章
日期:2016-11-07 08:28:12luobin
日期:2016-06-17 17:46:36wusuopu
日期:2016-06-17 17:43:4515-16赛季CBA联赛之福建
日期:2016-01-14 12:49:22程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2015-06-08 22:20:00程序设计版块每日发帖之星
日期:2015-06-08 22:20:002015年亚洲杯之科威特
日期:2015-03-24 14:21:272015年迎新春徽章
日期:2015-03-04 09:57:092016科比退役纪念章
日期:2018-04-10 16:20:18
发表于 2015-03-23 09:50 |显示全部楼层
回复 2# hellioncu


    多谢多谢

论坛徽章:
24
狮子座
日期:2013-12-31 10:48:0015-16赛季CBA联赛之吉林
日期:2016-04-18 14:43:1015-16赛季CBA联赛之北控
日期:2016-05-18 15:01:4415-16赛季CBA联赛之上海
日期:2016-06-22 18:00:1315-16赛季CBA联赛之八一
日期:2016-06-25 11:02:2215-16赛季CBA联赛之佛山
日期:2016-08-17 22:48:2615-16赛季CBA联赛之福建
日期:2016-12-27 22:39:272016科比退役纪念章
日期:2017-02-08 23:49:4315-16赛季CBA联赛之八一
日期:2017-02-16 01:05:3415-16赛季CBA联赛之山东
日期:2017-02-22 15:34:5615-16赛季CBA联赛之上海
日期:2017-11-25 16:17:5015-16赛季CBA联赛之四川
日期:2016-01-17 18:38:37
发表于 2015-03-23 15:31 |显示全部楼层
VIP_fuck 发表于 2015-03-23 09:44
RT。

我们现在的UDP 服务器处理能力太差,提不上去,想找个东西参考一下。或者有什么资料也行。



     UDP 我会

  1. void ser_udp()
  2. {
  3.     cout << "ser_udp" << endl;

  4.     boost::asio::io_service io_service;
  5.     boost::asio::ip::udp::socket udp_socket(io_service);
  6.     boost::asio::ip::udp::endpoint local_add(boost::asio::ip::address::from_string("0.0.0.0"), UDP_PORT);

  7.     udp_socket.open(local_add.protocol());
  8.     udp_socket.bind(local_add);

  9.     char receive_buffer[256];
  10.     memset(receive_buffer, 0, 256);

  11.     using namespace boost::property_tree;

  12.     while (true)
  13.     {
  14.         boost::asio::ip::udp::endpoint send_point;
  15.         udp_socket.receive_from(boost::asio::buffer(receive_buffer, 256), send_point);

  16.         string  str_json_recv = receive_buffer;
  17.         string  str_name;

  18.         std::stringstream ss(str_json_recv);
  19.         ptree pt;
  20.         try
  21.         {
  22.             read_json(ss, pt);
  23.             str_name = pt.get<string>("name");
  24.         }
  25.         catch(ptree_error & e)
  26.         {
  27.             cout << "json err " << endl;

  28.             continue;
  29.         }

  30.         //cout << "recv:" << receive_buffer << endl;

  31.         string str_txt = "recv: ";
  32.         str_txt +=  receive_buffer;

  33.         wxThreadEvent event( wxEVT_THREAD, WORKER_EVENT );

  34.         event.SetString(str_txt);

  35.         MyApp  &app = wxGetApp();
  36.         wxQueueEvent(&app, event.Clone());


  37.         if (str_name != "cvrpc")
  38.         {
  39.             cout << "json name err " << endl;
  40.             continue;
  41.         }

  42.         memset(receive_buffer, 0, 256);

  43.         string  str_json_ipv4;
  44.         local_ipv4(str_json_ipv4);

  45.         memmove(receive_buffer, str_json_ipv4.c_str(), str_json_ipv4.length());

  46.         udp_socket.send_to(boost::asio::buffer(receive_buffer), send_point);
  47.         //udp_socket.send_to(boost::asio::buffer(str_json_ipv4), send_point);
  48.         memset(receive_buffer, 0, 256);
  49.     }
  50. }
复制代码

论坛徽章:
12
2015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之同曦
日期:2017-03-17 19:13:162016科比退役纪念章
日期:2016-11-07 08:28:12luobin
日期:2016-06-17 17:46:36wusuopu
日期:2016-06-17 17:43:4515-16赛季CBA联赛之福建
日期:2016-01-14 12:49:22程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2015-06-08 22:20:00程序设计版块每日发帖之星
日期:2015-06-08 22:20:002015年亚洲杯之科威特
日期:2015-03-24 14:21:272015年迎新春徽章
日期:2015-03-04 09:57:092016科比退役纪念章
日期:2018-04-10 16:20:18
发表于 2015-03-23 15:58 |显示全部楼层
回复 4# zhujiang73

这么写我也会
   

论坛徽章:
24
狮子座
日期:2013-12-31 10:48:0015-16赛季CBA联赛之吉林
日期:2016-04-18 14:43:1015-16赛季CBA联赛之北控
日期:2016-05-18 15:01:4415-16赛季CBA联赛之上海
日期:2016-06-22 18:00:1315-16赛季CBA联赛之八一
日期:2016-06-25 11:02:2215-16赛季CBA联赛之佛山
日期:2016-08-17 22:48:2615-16赛季CBA联赛之福建
日期:2016-12-27 22:39:272016科比退役纪念章
日期:2017-02-08 23:49:4315-16赛季CBA联赛之八一
日期:2017-02-16 01:05:3415-16赛季CBA联赛之山东
日期:2017-02-22 15:34:5615-16赛季CBA联赛之上海
日期:2017-11-25 16:17:5015-16赛季CBA联赛之四川
日期:2016-01-17 18:38:37
发表于 2015-03-23 16:28 |显示全部楼层
VIP_fuck 发表于 2015-03-23 15:58
回复 4# zhujiang73

这么写我也会



       推荐一个异步的
  1. // boost_028.cpp : Defines the entry point for the console application.
  2. //

  3. #include "stdafx.h"
  4. #include <ctime>

  5. #include <boost/asio/ip/tcp.hpp>
  6. #include <boost/asio.hpp>
  7. #include <boost/bind.hpp>
  8. #include <boost/enable_shared_from_this.hpp>
  9. #include <boost/shared_ptr.hpp>
  10. #include <boost/array.hpp>

  11. #include <iostream>
  12. #include <string>

  13. //使用UDP命名空间
  14. using boost::asio::ip::udp;

  15. //把当前时间转换为字符串。
  16. std::string make_daytime_string()
  17. {
  18.         using namespace std; //为了使用time_t, time 和 ctime;
  19.         time_t now = time(0);
  20.         return ctime(&now);
  21. }

  22. //
  23. //创建一个异步UDP的时间服务器。
  24. //软件开发人员: 蔡军生  2013-08-25
  25. //QQ: 9073204
  26. //
  27. class UdpTimeServer
  28. {
  29. public:
  30.         //传入IO服务,然后创建一个UDP的SOCKET,IPV4版本,端号为13
  31.         UdpTimeServer(boost::asio::io_service& ioService)
  32.                 :m_sockUdp(ioService,  udp::endpoint(udp::v4(), 13))
  33.         {
  34.                 //进入接收服务中。
  35.                 RecvTime();
  36.         }
  37. private:
  38.         //接收收客户端的请求。
  39.         void RecvTime(void)
  40.         {
  41.                 //异步接收数据
  42.                 m_sockUdp.async_receive_from(
  43.                         boost::asio::buffer(m_recvBuf), m_endpointRemote,
  44.                         boost::bind(&UdpTimeServer::handleRecvTime, this,
  45.                         boost::asio::placeholders::error,
  46.                         boost::asio::placeholders::bytes_transferred));
  47.         }

  48.         //当收到客户端数据时,就进入本函数响应处理
  49.         void handleRecvTime(const boost::system::error_code& error,
  50.                 std::size_t /*bytes_transferred*/)
  51.         {
  52.                 //如果没有出错,就把时间字符串发送给客户端。
  53.                 if (!error || error == boost::asio::error::message_size)
  54.                 {
  55.                         boost::shared_ptr<std::string> strMessage(
  56.                                 new std::string(make_daytime_string()));

  57.                         m_sockUdp.async_send_to(boost::asio::buffer(*strMessage), m_endpointRemote,
  58.                                 boost::bind(&UdpTimeServer::handleSendTime, this, strMessage,
  59.                                 boost::asio::placeholders::error,
  60.                                 boost::asio::placeholders::bytes_transferred));

  61.                         //接收下一次的信息。
  62.                         RecvTime();
  63.                 }
  64.         }

  65.         //当发送时间字符串给客户端成功之后响应。
  66.         void handleSendTime(boost::shared_ptr<std::string> /*strMessage*/,
  67.                         const boost::system::error_code& /*error*/,
  68.                         std::size_t /*bytes_transferred*/)
  69.         {

  70.         }

  71. private:
  72.         udp::socket m_sockUdp; //服务器的SOCKET。
  73.         udp::endpoint m_endpointRemote; //收到数据时的端点信息。
  74.         boost::array<char, 1> m_recvBuf; //接收数据缓冲区。
  75. };

  76. void TestUdp(void)
  77. {
  78.         boost::asio::io_service ioService;
  79.         UdpTimeServer udpTimeServer(ioService);
  80.         ioService.run();
  81. }


  82. int _tmain(int argc, _TCHAR* argv[])
  83. {
  84.         //
  85.         TestUdp();

  86.         return 0;
  87. }
复制代码

论坛徽章:
12
2015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之同曦
日期:2017-03-17 19:13:162016科比退役纪念章
日期:2016-11-07 08:28:12luobin
日期:2016-06-17 17:46:36wusuopu
日期:2016-06-17 17:43:4515-16赛季CBA联赛之福建
日期:2016-01-14 12:49:22程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2015-06-08 22:20:00程序设计版块每日发帖之星
日期:2015-06-08 22:20:002015年亚洲杯之科威特
日期:2015-03-24 14:21:272015年迎新春徽章
日期:2015-03-04 09:57:092016科比退役纪念章
日期:2018-04-10 16:20:18
发表于 2015-03-23 16:40 |显示全部楼层
回复 6# zhujiang73


    异步不就是换了个asio的接口嘛,,,来个靠谱的

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:48:31平安夜徽章
日期:2015-12-26 00:06:30C
日期:2016-10-25 16:26:25
发表于 2015-03-23 17:48 |显示全部楼层
有个开源的框架:UDT,参考下。

论坛徽章:
12
2015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之同曦
日期:2017-03-17 19:13:162016科比退役纪念章
日期:2016-11-07 08:28:12luobin
日期:2016-06-17 17:46:36wusuopu
日期:2016-06-17 17:43:4515-16赛季CBA联赛之福建
日期:2016-01-14 12:49:22程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2015-06-08 22:20:00程序设计版块每日发帖之星
日期:2015-06-08 22:20:002015年亚洲杯之科威特
日期:2015-03-24 14:21:272015年迎新春徽章
日期:2015-03-04 09:57:092016科比退役纪念章
日期:2018-04-10 16:20:18
发表于 2015-03-24 10:06 |显示全部楼层
回复 8# eliry


    万分感谢

论坛徽章:
24
狮子座
日期:2013-12-31 10:48:0015-16赛季CBA联赛之吉林
日期:2016-04-18 14:43:1015-16赛季CBA联赛之北控
日期:2016-05-18 15:01:4415-16赛季CBA联赛之上海
日期:2016-06-22 18:00:1315-16赛季CBA联赛之八一
日期:2016-06-25 11:02:2215-16赛季CBA联赛之佛山
日期:2016-08-17 22:48:2615-16赛季CBA联赛之福建
日期:2016-12-27 22:39:272016科比退役纪念章
日期:2017-02-08 23:49:4315-16赛季CBA联赛之八一
日期:2017-02-16 01:05:3415-16赛季CBA联赛之山东
日期:2017-02-22 15:34:5615-16赛季CBA联赛之上海
日期:2017-11-25 16:17:5015-16赛季CBA联赛之四川
日期:2016-01-17 18:38:37
发表于 2015-03-24 11:06 |显示全部楼层
VIP_fuck 发表于 2015-03-23 16:40
回复 6# zhujiang73



           一般这就行了,不过本人不会搞集群服务器,没玩过那么大的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP