请教使用boost::asio的大神 async_write的问题

a610138467 2016-04-05 08:30:58
如题,在程序中使用的boost::asio,向连接发送消息用的是async_write 发送一个固定长度的消息。因为时间情况是会随时向一个连接发消息,所以会多线程中多次调用这个函数,但是对这个函数的调用是加锁操作的,也就是一个线程中等async_write返回后才在另一个线程中继续调用发送。
遇到的问题是发送很多比较大的包 比如 1M的包会出现乱序的问题。

比如同时发送A B 两个1M大小的包,在IP层因为包太大所以每个包都被分割成小包 变成 A1 A2 A3 A4 B1 B2 B3 B4。但实际客户端收到的包是 A1 A2 B1 B2 B3 A3 A4 B4 也就是顺序乱了,所以也就无法组成一个完整的包,请教各位大神,async_write底层没有保证顺序吗?

因为时间比较近,所以只是简单差了些资料。都说底层调用的还是async_write_some 所以无法保证顺序,正确的做法应该是在一个async_write 完成的回调中调用第二个包的async_write 如果这样做的话那就得自己维护一个发送队列了。实际使用的时候真的需要这样麻烦么~
...全文
522 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
拥剑公子 2017-08-21
  • 打赏
  • 举报
回复
up............................

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧