TCPSteam包合并多个包



我有一个关于Rust中的TCPStream包的问题。我想从服务器读取数据。问题是不能保证数据是在一个TCP包中发送的。我的问题来了:read消息是否能够读取多个包,或者我是否必须调用多个包?有没有什么"最佳实践"?

来自用户空间的TCP数据包是不可见的,它们的边界无关紧要。相反,用户空间只读取字节流并只写入字节流。分组是在较低的级别上完成的,以达到延迟和带宽的最佳效果。很可能发生来自用户空间的多个write最终在同一个数据包中,也可能发生单个write将产生多个数据包。read也是如此:它可能会获得数据包的一部分,它可能会从多个连续数据包中获取有效载荷…

来自底层传输的任何数据包边界在用户空间中不再可见。因此,使用TCP的协议必须在字节流之上实现自己的消息语义。

所有这些都不是Rust所特有的,但也适用于其他编程语言。

最新更新