【发布时间】:2020-05-10 11:07:46
【问题描述】:
我正在尝试使用独立 ASIO 库 (C++) 通过以太网使用 UDP 套接字发送图像(称为帧)。 我有一个每秒运行 30 次的无限循环,并且在每次迭代时,我想通过 UDP 发送帧。帧作为 c 样式的 char 数组 (char frame[]) 进行管理。
我读到 ASIO 支持异步操作,我正在尝试使用 async_send_to 方法在不阻塞调用者的情况下发送帧(为了不阻塞摄像头)。 由于每帧大约 4 MB,我必须发送 1500 字节的小数据包(UDP 允许的最大尺寸为 65537,但物理以太网限制为 1500 字节)。因此,在每次相机迭代中,我必须通过 UDP 发送超过 3000 个数据包。
我阅读了很多关于 ASIO 的文档,并提出了以下解决方案(高级伪代码):
asio::io_context io_context;
while(true){ // camera infinite loop
auto frame = camera.getFrame(); // byte array
for(i = 0; i < 3000; i++){
char packet[1500];
...
// fill the packet with (1500 - header) byte of the frame (header to reorder the packet
...
socket.async_send_to(packet);
}
io_context.run(); // wait async operations to finish
io_context.reset();
}
我不确定这是否是一个有效的解决方案,以及我是否正确使用了 io_context.run() 函数。 我担心内部循环,它需要太多时间,我想知道是否有人知道我可以如何改进我的代码。
提前谢谢你
【问题讨论】: