c++ - Boost asio - 同时阅读和写作

标签 c++ multithreading thread-safety boost-asio

我正在尝试使用 boost:asio 实现双向通信。我正在编写将与多个客户端通信的服务器。

我希望在没有任何同步和顺序的情况下对客户端进行写入和读取 - 客户端可以随时向服务器发送命令,并且它仍然会循环接收一些数据。当然,必须保护对共享资源的访问。

实现此目标的最佳方法是什么?有两个线程 - 一个用于阅读,一个用于编写一个好的选择吗?接受连接并管理许多客户端怎么样?

//编辑

“无同步和顺序”我的意思是服务器应该一直向客户端传输数据,并且它可以随时响应(更改其行为)客户端请求,而不管现在发送给他们的是什么.

最佳答案

asio 背后的一个关键思想就是您不需要多个线程来处理多个客户端 session 。您的描述有点笼统,我不确定我是否理解您所说的“我希望在没有任何同步和顺序的情况下对客户端进行写入和读取”是什么意思。

一个好的起点是 asio chat server例子。请注意在本示例中,如何为每个连接的客户端创建类 chat_session 的实例。只要连接处于事件状态,该类的对象就会继续发布异步读取,同时它们可以将数据写入连接的客户端。与此同时,chat_server 类的对象不断接受新的传入客户端连接。

关于c++ - Boost asio - 同时阅读和写作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13574798/

相关文章:

c++ - Eigen 3.3 中的 ARM NEON 改进

C++从文件的多个部分读取速度太慢

javascript - 后台线程卡住 WebView

python - Python字典中的线程安全

java - Semaphore 可以安全地使用双重检查锁定习惯用法吗?

c++ - 在现代 C++ 中在函数声明中定义返回变量是否合法?

c++ - 序列化部分工作 - boost::asio

c++ - 在 C++ 中,如何使用多个线程读取一个文件?

python - 多线程访问 Python bytearray

java - 在设置了*中断状态*的情况下调用 Thread.sleep()?