1. boost::asio::io_service io_svc;
  2. boost::asio::ip::address_v4 lis_ip; // 默认监听本机所有IP
  3. boost::asio::ip::tcp::endpoint lis_ep(lis_ip, ); // 监听端口: 20017
  4. // 一般情况构造acceptor 是按下面的方法进行构造
  5. boost::asio::ip::tcp::acceptor acc(io_svc, lis_ep);
  6. // 然后就可以直接使用acc 对象调用acc.async_accept(...) 函数了。

另外一种,如下:

  1. // 但是如果 想要将acc 对象的实例放到一个类中,该类的构造函数中对该acceptor 进行实例化,
  2. // 同时在构造函数中不进行监控操作,那么就需要上面的构造进行分解开来了。
  3. boost::asio::io_service io_svc;
  4. boost::asio::ip::tcp::acceptor acc(io_svc);
  5.  
  6. // 下面几步其实是将: boost::asio::ip::tcp::acceptor acc(io_svc, lis_ep) 拆解开来,分开调用。
  7. // 这样方便我们自己实现类对象的各步骤。
  8. boost::asio::ip::address_v4 lis_ip; // 默认监听本机所有IP
  9. boost::asio::ip::tcp::endpoint lis_ep(lis_ip, ); // 监听端口: 20017
  10. acc.open(lis_ep.protocol());
  11. acc.bind(lis_ep);
  12. acc.listen();
  13. // 接下来就可以调用acc.async_accept(...) 函数了。

提示:boost::asio::ip::tcp::acceptor 是没有空参构造函数的。

一大问题:

刚刚发现,将acceptor 的构造拆分成多个函数调用与直接使用构造函数进行构造对客户端的连接处理不同,而且效率差别很大。

具体场景为:

  服务器:一个io_service 开10个线程,并发5个acceptor.async_wait() 调用。所有连接的所有处理全是调用异步函数。

  客户端:一个io_service 开5个线程,直接循环50个async_connect(),没有任何sleep。客户端每次去仅仅的发送一个消息,马上就断开连接。

现象:

  1、服务器使用上面说到的第一种方式进行构造acceptor (即:直接构造),这时50个连接都能被服务器正常处理。客户端将个数调整到500 个可以350 个以上的连接;

  2、服务器使用第二种方式进行构造acceptor (即:分成多个步骤),这时这50个连接有20个左右未能成功连接上服务器。

暂时得到的结论是:使用第一种方式进行构造acceptor  比第二种方式进行构造accpetor 处理客户端的连接速度快很多。

boost asio acceptor 构造的更多相关文章

  1. cpprestsdk同时使用boost.asio,acceptor就一直报Invalid argument。

    本文目录,首先总结问题,然后案例还原. 总结: 问题的根本在于boost.asio作为header-only库,运行程序与动态库之间容易因为版本错配而产生运行期莫名其妙的问题. cpprestsdk使 ...

  2. boost asio tcp server 拆分

    从官方给出的示例中对于 boost::asio::ip::tcp::acceptor 类的使用,是直接使用构造函数进行构造对象,这一种方法用来学习是一个不错的方式. 但是要用它来做项目却是不能够满足我 ...

  3. boost::asio译文

        Christopher Kohlhoff Copyright © 2003-2012 Christopher M. Kohlhoff 以Boost1.0的软件授权进行发布(见附带的LICENS ...

  4. 使用Boost.Asio编写通信程序

    摘要:本文通过形像而活泼的语言简单地介绍了Boost::asio库的使用,作为asio的一个入门介绍是非常合适的,可以给人一种新鲜的感觉,同时也能让体验到asio的主要内容. Boost.Asio是一 ...

  5. boost asio io_service学习笔记

    构造函数 构造函数的主要动作就是调用CreateIoCompletionPort创建了一个初始iocp. Dispatch和post的区别 Post一定是PostQueuedCompletionSta ...

  6. boost ASIO实例

    client端代码 #include <iostream> #include <boost/asio.hpp> #include <boost/bind.hpp> ...

  7. Boost.Asio技术文档

    Christopher Kohlhoff Copyright © 2003-2012 Christopher M. Kohlhoff 以Boost1.0的软件授权进行发布(见附带的LICENSE_1_ ...

  8. boost.asio源码阅读(1) - 从chat_server开始

    1. 关于示例代码 chat 先从简单的入手, 在如下路径:boost_1_63_0/libs/asio/example/cpp11/chat中找到chat_server.cpp 查看其成员, pri ...

  9. Boost.Asio 网络编程([译]Boost.Asio基本原理)

    转自:https://m.w3cschool.cn/nlzbw/nlzbw-3vs825ya.html Boost.Asio基本原理 这一章涵盖了使用Boost.Asio时必须知道的一些事情.我们也将 ...

随机推荐

  1. 两分钟学会Unity3D布娃娃的使用

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/wangbin_jxust/article/details/28587233 在RPG游戏中,为了让人 ...

  2. Java的部分问题和小结

    2015/9/6 ThreadLocal:该类提供了线程局部变量,这样可以生成对每个线程唯一的局部标识符. 2015/9/18 1.乱码问题:  js:xdata = encodeURI(encode ...

  3. Python-数字类型补充

    Python第五节数字类型补充 数字类型转换 int(x) float(x) complex(x) complex(x, y) 数学常量 pi e PS 数字类型不允许改变 也就是说,当我们对数字类型 ...

  4. css3两个汤圆亲吻动效

    效果图: 模板来源:https://www.17sucai.com/pins/demo-show?id=35132 自己仿写出来的效果图: 笔记: 1.transform:translate(-50% ...

  5. 关于KiCAD的一些插件

    关于KiCAD的一些插件 https://gitee.com/KiCAD-CN/KiCad-CN-Forum/blob/master/KiCad_help_zh_CN.md#swapit-%E5%B7 ...

  6. 你不知道的USB

    USB的接口类型.定义和原理 目前USB接口类型已经更新到了USB3.1和USB Type-C类型,下面就对USB的类型进行介绍整理 一.UCB的通信协议类型 1.1 USB定义及类型 USB(Uni ...

  7. dubbo-源码阅读之服务订阅

    配置例子 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://w ...

  8. ajax请求的原生js实现

    我们使用ajax请求一般都用的jQuery, axios封装好了的api, 那么如果只能用原生js, 我们该如何操作了? 上代码. 我们在同目录下写好一个json文件(data.json)用于请求测试 ...

  9. Java 基础 - System.arraycopy() 浅拷贝 深拷贝

    ref: https://blog.csdn.net/balsamspear/article/details/85069207 https://blog.csdn.net/balsamspear/ar ...

  10. SP8222 NSUBSTR - Substrings(后缀自动机+dp)

    传送门 解题思路 首先建出\(sam\),然后把\(siz\)集合通过拓扑排序算出来.对于每个点只更新它的\(maxlen\),然后再从大到小\(dp\)一次就行了.因为\(f[maxlen-1]&g ...