TCPSteam 包组合多个包

TCPSteam package combine multiple packages

我对 Rust 中的 TCPStream 包有疑问。我想从服务器读取数据。问题是不能保证数据在一个TCP包中发送。
我的问题来了: 已读消息是否能够读取多个包,还是我必须调用多个包?有什么“最佳实践”吗?

来自用户space TCP 数据包不可见,它们的边界无关紧要。相反,用户 space 只读取字节流并且只写入字节流。打包是在较低级别上完成的,以便对延迟和带宽进行优化。很可能来自用户 space 的多个 write 最终出现在同一个数据包中,也可能发生单个 write 将导致多个数据包。 read 也是如此:它可能会获取一个数据包的一部分,它可能会从多个连续的数据包中获取有效载荷 ...

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

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