我正在尝试使用 boost:asio 实现双向通信。我正在编写将与多个客户端通信的服务器。
我希望在没有任何同步和顺序的情况下对客户端进行写入和读取 - 客户端可以随时向服务器发送命令,并且它仍然会循环接收一些数据。当然,必须保护对共享资源的访问。
实现此目标的最佳方法是什么?有两个线程 - 一个用于阅读,一个用于编写一个好的选择吗?接受连接并管理许多客户端怎么样?
//编辑
“无同步和顺序”我的意思是服务器应该一直向客户端传输数据,并且它可以随时响应(更改其行为)客户端请求,而不管现在发送给他们的是什么.
最佳答案
asio 背后的一个关键思想就是您不需要多个线程来处理多个客户端 session 。您的描述有点笼统,我不确定我是否理解您所说的“我希望在没有任何同步和顺序的情况下对客户端进行写入和读取”是什么意思。
一个好的起点是 asio chat server例子。请注意在本示例中,如何为每个连接的客户端创建类 chat_session
的实例。只要连接处于事件状态,该类的对象就会继续发布异步读取,同时它们可以将数据写入连接的客户端。与此同时,chat_server
类的对象不断接受新的传入客户端连接。
关于c++ - Boost asio - 同时阅读和写作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13574798/