【发布时间】:2013-06-17 14:36:07
【问题描述】:
我正在使用 Boost ASIO 和 UDP 将数据报从一个点传输到另一个点。
- 我的发件人每 500 毫秒发送一个数据报
- 我的接收器监听传入的数据,然后使用它。接收方使用async_receive_from接收数据
在某些情况下,接收器可能需要超过 500 毫秒的时间来处理数据。发送方不会停止发送数据。
当前行为:
发送的数据报在操作系统网络队列中排队。当我执行async_receive_from 时,我会得到下一个要使用的 UDP 数据报。
想要的行为:
发送的数据报在操作系统网络队列中排队。当我执行接收时,我得到了所有的数据报。那么队列是空的。我不知道队列中有多少数据报,也不知道它们的大小。
是否有可能最好使用 Boost::ASIO 和 async_receive_from 来实现这样的目标?如果没有:是否有其他库可以做这样的事情?
如果提供了另一种解决方案:我正在使用 Linux 和 Windows,如果您的解决方案是可移植的,那就太好了。
【问题讨论】:
-
恕我直言,解决方案不是依赖一些“操作系统网络队列”,而是在接收器内部组织这样的队列。逻辑是有两个线程 - 第一个接收数据包并将它们存储到队列中,第二个接收排队的数据包并处理它们。
-
只是出于好奇:您为什么不创建答案而不是评论?
-
因为我认为它并不能直接回答您的问题。这只是一个建议。答案应该是——是的,有可能。
标签: c++ networking boost udp boost-asio