请教使用boost::asio的大神 async_write的问题
如题,在程序中使用的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 如果这样做的话那就得自己维护一个发送队列了。实际使用的时候真的需要这样麻烦么~