C++ Boost.Asio - TCP 套接字异步写入
C++ Boost.Asio - tcp socket asynchronous write
>场景:
-
在对象 A(线程 A)内部,正在异步读取和写入 boost::asio::ip::tcp::socket。
对象 B (线程 B)将数据发布到对象 A 的数据队列。
对象 A 应尽快将数据写入其数据队列。
如何高效实现第三点?
现在我正在这样做:
-
队列中可能没有数据。
-
套接字>async_send(数据、处理程序);
-
内部处理程序:回到第二点。
我担心这种方法效率非常低 - 大多数时候使用零长度数据调用async_send,直到可以发送实际数据。
更好的方法是在对象 A 中有一个额外的线程,该线程在发布新数据后立即在套接字上执行同步写入?从对象 B 的线程进行写入是毫无疑问的。
首先,除非您有充分的理由这样做,否则我个人不会将其分解为每个对象 1 个线程。
相反,有一个共享io_service
(只需通过引用 A 和 B ctors 将其传入即可。然后在io_serice.run()
上有一个线程.
假设其中一个对象也是async_reading,则无需编写 0 长度基准并在处理程序中创建循环。只需将async_write
安排为数据进入的时间即可。
"
对象 A 应该尽快将数据写入其数据队列"可以理解为等待C++未来,所以你检查那个答案和那个 boost::asio::example,最后但并非最不重要的一点是,我认为你的"数据队列"需要一些改进,你可以看看这个答案。
相关文章:
- TCP 服务器的异步读取使用 boost::asio 打印客户端套接字发送的数据
- 为异步发送缓冲区保留内存(提升 asio 套接字)
- Boost-Beast 异步 Web 套接字 服务器-客户端异步读写 不在控制台上写入输出
- C++ Boost.Asio - TCP 套接字异步写入
- 使用相同的 udp 套接字进行异步接收/发送
- 提升同一对象上的异步套接字和线程池io_service
- 谈到套接字时使用的同步和异步术语
- 为什么在读取非HTTP服务器的套接字时需要异步IO
- C#异步套接字与C++winsock2之间的通信
- 在 winsock 服务器中使用异步套接字的非阻塞模式C++不同
- C++ 异步套接字(System.Net.Sockets.Socket.BeginAccept)与WinSock2.h
- C++ ASIO:异步套接字和线程
- 处理一个套接字和多个线程时异步 IO 的用例
- C++ 赢异步套接字.是否可以中断 select()
- 有没有更好的方法在C++中使用异步TCP套接字,而不是轮询或选择
- 异步套接字连接,当服务器断开TCP通信时,客户端GUI挂起
- 如何在linux上获得异步套接字上可读取的字节数
- 异步Boost写入Java套接字-传入的字节数组有时部分为0
- 异步等待,直到在Asio中有一个套接字可用于读/写
- 我可以在 boost::asio 异步模式下创建和接受套接字时使用 boost::shared_ptr 吗?