0

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

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

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

提前谢谢..

4

1 回答 1

1

使其成为具有线程安全队列的每个连接的线程,以用作主线程的收件箱。它不能针对多个连接进行扩展,但当您不需要可扩展性时,它是最安全、最简单的做法。写入将由主线程直接写入套接字。读取将由专用线程完成,它将在临时缓冲区中累积读取的数据位,直到它接收到整个消息,然后它将完整的消息转发到主线程的收件箱队列中。如果您需要提供许多连接或资源有限,那么您需要使用基于 select()/epoll() 的事件循环(又名反应器)的非阻塞 IO。

于 2012-11-14T07:47:53.550 回答