Boost同步客户端和服务器-无限循环阻止其余部分

Boost同步客户端和服务器-无限循环阻止其余部分,boost,client,boost-asio,boost-thread,synchronous,Boost,Client,Boost Asio,Boost Thread,Synchronous,我正在使用一个同步服务器和客户端,它在无限循环中读取数据 for (;;){ boost::system::error_code error; read(socket,boost::asio::buffer(&abc, sizeof(abc))); ... } 既然我想使用snych而不是asynch,解决程序其余部分阻塞的最佳方法是什么。(线程?) thx提前..使用线程安全队列将每个连接设为线程,作为主线程的收件箱。它不能扩展到多个连接,但当您不需要可扩展性时,它是最安全、

我正在使用一个同步服务器和客户端,它在无限循环中读取数据

for (;;){
  boost::system::error_code error;
  read(socket,boost::asio::buffer(&abc, sizeof(abc)));
...
}
既然我想使用snych而不是asynch,解决程序其余部分阻塞的最佳方法是什么。(线程?)


thx提前..

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

将其设为每个连接的线程,并使用in/out线程安全队列与主线程通信可能我误解了您的意思。。但是,难道没有一种解决方案可以让服务器和客户机保持原样,但当我从我的主函数(在c++中)调用客户机启动/读取时,客户机启动,但主函数也继续(并行)吗?thx..@ddd-除非执行非阻塞IO,否则无法通过单个线程读取和执行其他操作(但在这种情况下,事情会变得更加复杂)。你要么阻止阅读,要么做其他事情。这就是为什么您需要一个单独的线程,它的唯一作用是始终阻止从套接字读取数据。。我只需要一个连接。程序启动,客户端连接并从服务器接收数据,直到结束。您是否有一个如何实现它的示例(链接)?我也在考虑使用asynch(我想这也能解决我的问题!?),但必须确保所有内容都正确传输。thx..@ddd-客户端应该如何处理它接收的数据?在定义实现的具体工作方式时,这一点很重要。我向客户端发送一个映像/数组(短数组),并在客户端使用它作为附加信息(因此每秒5-10次就可以了)。因此,接收整个数据是很重要的,但是如果客户机没有从服务器获取每一帧数据,这就不是问题