使用async_read的boost.asio多线程I / O服务器

时间:2013-11-11 19:22:58

标签: c++ boost tcp boost-asio

基本逻辑如下

main_thread:

  

for(;;){
  接受插座
  async_read head(包长度),绑定到head_handler
  io_service.run()   }

head_handler(非螺纹):

  

async_read body(使用从头部读取的长度),绑定到body_handler

body_handler(非螺纹):

  

将消息解析为Request对象(自定义类)   push请求request_pool

read_thread:

  

for(;;){
      if request_pool不为空(否则为lock){            执行请求描述的操作       }}

所以我有一个使用上述逻辑的简单回显服务器。它打印出传入的任何消息。但是,只会显示第一条消息,所有其他消息都会正确打印出“xxx.xxx.xxx.xxx已连接”消息。但是没有打印消息

1 个答案:

答案 0 :(得分:2)

如果您不发出任何异步。 body_handler中的操作,io_service用尽了工作和io_service::run()退出。在随后拨打io_service::run()之前,您必须致电io_service::reset()