boost asio的几个小技巧。

原创 2010年05月03日 11:22:00

平台:win2k或者以上
1、投递多个accept请求
这个也是对应以前完成端口的投递若干个wsaaccept的
for(int index=0;index<32;index++)
{
HqSessionPtr new_connection(new HqSession(_io_service));
new_acceptor->async_accept(new_connection->socket(),
boost::bind(&HqSessionMgr::handle_accept, this,new_connection,new_acceptor,boost::asio::placeholders::error));
}
2、同时监听多个端口
g_ui_log->info("服务器启动,ThreadSize(%d)",_thread_pool_size);
for(std::set::iterator it=_listen_ports.begin();it!=_listen_ports.end();it++)
{
int curport=*it;
try
{
using boost::asio::ip::tcp;
tcp::endpoint endpoint(tcp::v4(),curport);
//这里是根据每个监听端口创个新的acceptor
boost::asio::ip::tcp::acceptor *new_acceptor=new boost::asio::ip::tcp::acceptor(_io_service,endpoint);
_acceptors.push_back(new_acceptor);
g_ui_log->info("开始监听端口:%d",curport);
for(int index=0;index<32;index++)
{
//这里是写死了投递32个,也可以从配置文件读入。
HqSessionPtr new_connection(new HqSession(_io_service));
new_acceptor->async_accept(new_connection->socket(),
boost::bind(&HqSessionMgr::handle_accept, this,new_connection,new_acceptor,boost::asio::placeholders::error));
}
}
catch(...)
{
g_ui_log->info("监听端口失败:%d",curport);
}
}
这边是对每个端口进行投递
3、 每个session同时只有同一个线程里处理。
这个具体用strand估计大家都知道了。
这种做法有别于以前的用锁来实现,这样做了后就 可以不用锁,而且处理线程不用等待。
我只稍微说一下原理。
原理是这样的,每次读,写请求其实都是一个类似函数指针的东东,strand就 是维护着一个列表,每个读写请求来了后会看这个session是否有正在处理的请求,如果有的话就直接丢列表,
每次处理的请求完毕后,会看列表里 是否有请求,如果有的话,把这个直接重新post到io_service里去。

用boost.asio的感觉还可以,上面只是我做为初学 者的一些感觉,高手一笑而过吧。

boost asio 异步实现tcp通讯

转自 http://blog.csdn.net/fhxpp_27/article/details/8569013
  • yinchuofan1985
  • yinchuofan1985
  • 2014年05月06日 13:25
  • 5639

Boost Asio 实现的UDP异步监听和TCP异步发送程序

http://blog.chinaunix.net/uid-24544542-id-176702.html 代码很粗糙,希望朋友们多多指正^&^ #include #in...
  • yan420523
  • yan420523
  • 2013年06月20日 21:33
  • 1550

boost.asio 学习笔记05——asio的windows实现

Operation 还记得前面我们在分析resolver的实现的时候,挖了一个关于operation的坑?为了不让自己陷进去,现在来填吧;接下来我们就来看看asio中的各种operation。  ...
  • henan_lujun
  • henan_lujun
  • 2013年05月23日 14:04
  • 6413

Boost Asio 网络编程 基本用法

Boost Asio 网络编程 基本用法 flyfish 2015-2-9 IP地址 boost::asio::ip::address表示IP地址,同时支持ipv4和ipv6。 boost::a...
  • flyfish1986
  • flyfish1986
  • 2015年02月09日 17:37
  • 2974

Boost Asio 实现的UDP异步监听和TCP异步发送程序

http://blog.chinaunix.net/uid-24544542-id-176702.html 代码很粗糙,希望朋友们多多指正^&^ #include #in...
  • yan420523
  • yan420523
  • 2013年06月20日 21:33
  • 1550

boost asio使用注意事项

背景知识          高效网络编程一般都要依赖于IO复用,IO复用是指同时发送并监听处理很多socket或者文件读写的事件。IO复用的高效方式目前常用的有两种:Reactor和Proact...
  • missiletcy
  • missiletcy
  • 2017年04月06日 08:48
  • 193

Boost.Asio的使用技巧

基本概念 Asio proactor I/O服务 work类run() vs poll()stop()post() vs dispatch()buffer类缓冲区管理 I/O对象 ...
  • somestill
  • somestill
  • 2016年08月21日 19:01
  • 2232

Boost.Asio基本原理(CSDN也有Markdown了,好开森)

Boost.Asio基本原理 这一章涵盖了在使用Boost.Asio时必须知道的一些事情。我们也将深入研究比同步编程更复杂、更有乐趣的异步编程。...
  • mmoaay
  • mmoaay
  • 2016年02月24日 15:34
  • 10994

使用boost 的thread和asio库实现jpeg图片传输

使用boost 的thread和asio库实现jpeg图片传输   目的:熟悉boost thread和asio库;   1)实现jpeg图片传输;客户端将jpeg图片传输到服务端,服务端解码显示,解...
  • smilestone322
  • smilestone322
  • 2014年04月17日 16:40
  • 2032

Boost.Asio性能测试

今天看到 http://my.oschina.net/u/200693/blog/3446230 测评asio的效率, 结果如下表: c++ boost::asio connect=100...
  • educast
  • educast
  • 2013年10月27日 22:45
  • 9540
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:boost asio的几个小技巧。
举报原因:
原因补充:

(最多只允许输入30个字)