提升同步客户端和服务器 - 无限循环阻塞其余部分

时间:2012-11-13 11:11:59

标签: boost client boost-asio boost-thread synchronous

我正在使用同步服务器和读取无限循环的客户端。

for (;;){
  boost::system::error_code error;
  read(socket,boost::asio::buffer(&abc, sizeof(abc)));
...
}

解决阻塞其余程序的最佳方法是什么,因为我想使用snych而不是asynch。 (线程?)

事先提前......

1 个答案:

答案 0 :(得分:1)

使其成为一个线程安全队列的线程连接,作为主线程的收件箱。它不能扩展到多个连接,但是当您不需要可伸缩性时,这是最安全和最简单的事情。写入将由主线程直接进入套接字。读取将由专用线程完成,它将在临时缓冲区中累积读取数据位,直到它收到整个消息,然后将完整消息转发到主线程的收件箱队列中。 如果您需要提供多个连接或资源有限,则需要使用基于select()/ epoll()的事件循环(也称为reactor)的非阻塞IO。