首页 > 解决方案 > TCPSteam 包组合多个包

问题描述

TCPStream我对Rust中的包有疑问。我想从服务器读取数据。问题是不能保证数据在一个 TCP 包中发送。
我的问题来了:read message 是否能够读取多个包,还是我必须将其称为多个包?有没有“最佳实践”?

标签: socketsrustclient

解决方案


从用户空间看,TCP 数据包是不可见的,它们的边界也无关紧要。相反,用户空间只读取一个字节流,只写入一个字节流。打包是在较低级别以最佳延迟和带宽的方式完成的。很可能会发生write来自用户空间的多个最终在同一个数据包中的情况,也可能会发生单个write会导致多个数据包的情况。也是如此read:它可能会获取数据包的一部分,它可能会从多个连续的数据包中获取有效负载......

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

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


推荐阅读