基本逻辑如下
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已连接”消息。但是没有打印消息
答案 0 :(得分:2)
如果您不发出任何异步。 body_handler
中的操作,io_service
用尽了工作和io_service::run()
退出。在随后拨打io_service::run()
之前,您必须致电io_service::reset()
。