Boost ASIO-丢弃UDP数据包,与UE4 UDP接收器相比损失显著



我正在尝试使用一个简单的异步UDP侦听器。我还在一个游戏引擎项目中使用UE4 UDP套接字(FUdpSocketBuilder(。我不会同时运行这两个UDP侦听器。我从另一个应用程序的固定udp端口获得一系列字节数组,顺序如下:起始36、中间65488 x 6和结束400字节。但问题是我错过了4 x 65488个字节,有时我会在boost示例C++应用程序中得到后面的400个字节。我已经尝试将接收到的字节数组大小增加到一个高数字,包括下面声明的7-8倍:

constexpr int udp_buffer_size = 65536;  // Max limit of each packet size
boost::array<char, udp_buffer_size> recv_buffer_;

我能做什么,请给我建议?我也在Github上问过这个问题。

从Boost ASIO UDP:打印

I just recieved 36 bytes of data !
I just recieved 65488 bytes of data !
I just recieved 65488 bytes of data !
I just recieved 36 bytes of data !
I just recieved 65488 bytes of data !
I just recieved 65488 bytes of data !

从UE4:打印

[2018.11.28 - 17.18.29:724][829]SomeProjectLog:  Warning : 2297. Recieved Bytes from UDP 36.
[2018.11.28 - 17.18.29:724][829]SomeProjectLog : Warning : 2298. Recieved Bytes from UDP 65488.
[2018.11.28 - 17.18.29:724][829]SomeProjectLog : Warning : 2299. Recieved Bytes from UDP 65488.
[2018.11.28 - 17.18.29:725][829]SomeProjectLog : Warning : 2300. Recieved Bytes from UDP 65488.
[2018.11.28 - 17.18.29:725][829]SomeProjectLog : Warning : 2301. Recieved Bytes from UDP 65488.
[2018.11.28 - 17.18.29:725][829]SomeProjectLog : Warning : 2302. Recieved Bytes from UDP 65488.
[2018.11.28 - 17.18.29:725][829]SomeProjectLog : Warning : 2303. Recieved Bytes from UDP 65488.
[2018.11.28 - 17.18.29:726][829]SomeProjectLog : Warning : 2304. Recieved Bytes from UDP 400.
[2018.11.28 - 17.18.29:726][829]SomeProjectLog : Warning : 2305. Recieved Bytes from UDP 36.
[2018.11.28 - 17.18.29:726][829]SomeProjectLog : Warning : 2306. Recieved Bytes from UDP 65488.
[2018.11.28 - 17.18.29:726][829]SomeProjectLog : Warning : 2307. Recieved Bytes from UDP 65488.
[2018.11.28 - 17.18.29:726][829]SomeProjectLog : Warning : 2308. Recieved Bytes from UDP 65488.
[2018.11.28 - 17.18.29:727][829]SomeProjectLog : Warning : 2309. Recieved Bytes from UDP 65488.
[2018.11.28 - 17.18.29:727][829]SomeProjectLog : Warning : 2310. Recieved Bytes from UDP 65488.
[2018.11.28 - 17.18.29:727][829]SomeProjectLog : Warning : 2311. Recieved Bytes from UDP 65488.
[2018.11.28 - 17.18.29:727][829]SomeProjectLog : Warning : 2312. Recieved Bytes from UDP 400.

我今天能够修复UDP数据包丢失问题。这不是一个可以通过使用单独的线程来解决的并发问题。这是数据速度的问题,不是历元间的问题。我的意思是,它是一个数据流,将端口epoch(重要事件(上的UDP数据包转储到epoch,其间有一些获取延迟。这是处理任何事情的机会窗口,不是在epoch内,而是在epoch之后,即400个尾随字节。我使用的是单线程程序,但我有用于异步操作的Boost ASIO I/o对象。我现在所做的就是对收到的每个字节数组进行快速内存复制,直到我达到模-N(epoch字节总数(,然后我处理累积数组中的每个数据包,然后我就可以收集所有数据而不会丢失任何数据包!感谢所有的帮助@SergeyA
如果你想了解更多关于为什么除了使应用程序复杂之外还不建议使用线程的信息,这里有链接:Proactor设计模式:无线程并发。

最新更新