C++ Boost.Asio - TCP 套接字异步写入

C++ Boost.Asio - tcp socket asynchronous write

本文关键字:异步 套接字 TCP Boost Asio C++      更新时间:2023-10-16

>场景:

  1. 在对象 A(线程 A)内部,正在异步读取和写入 boost::asio::ip::tcp::socket。

  2. 对象 B
  3. (线程 B)将数据发布到对象 A 的数据队列。

  4. 对象 A 应尽快将数据写入其数据队列。

如何高效实现第三点?

现在我正在这样做:

  1. 队列中可能没有数据。

  2. 套接字>async_send(数据、处理程序);

  3. 内部处理程序:回到第二点。

我担心这种方法效率非常低 - 大多数时候使用零长度数据调用async_send,直到可以发送实际数据。

更好的方法是在对象 A 中有一个额外的线程,该线程在发布新数据后立即在套接字上执行同步写入?从对象 B 的线程进行写入是毫无疑问的。

首先,除非您有充分的理由这样做,否则我个人不会将其分解为每个对象 1 个线程。

相反,有一个共享io_service(只需通过引用 A 和 B ctors 将其传入即可。然后在io_serice.run()上有一个线程.

假设其中一个对象也是async_reading,则无需编写 0 长度基准并在处理程序中创建循环。只需将async_write安排为数据进入的时间即可。

"

对象 A 应该尽快将数据写入其数据队列"可以理解为等待C++未来,所以你检查那个答案和那个 boost::asio::example,最后但并非最不重要的一点是,我认为你的"数据队列"需要一些改进,你可以看看这个答案。