sockets - TCPSteam 包组合多个包
问题描述
TCPStream
我对Rust中的包有疑问。我想从服务器读取数据。问题是不能保证数据在一个 TCP 包中发送。
我的问题来了:read message 是否能够读取多个包,还是我必须将其称为多个包?有没有“最佳实践”?
解决方案
从用户空间看,TCP 数据包是不可见的,它们的边界也无关紧要。相反,用户空间只读取一个字节流,只写入一个字节流。打包是在较低级别以最佳延迟和带宽的方式完成的。很可能会发生write
来自用户空间的多个最终在同一个数据包中的情况,也可能会发生单个write
会导致多个数据包的情况。也是如此read
:它可能会获取数据包的一部分,它可能会从多个连续的数据包中获取有效负载......
来自底层传输的任何数据包边界不再从用户空间可见。因此,使用 TCP 的协议必须在字节流之上实现它们自己的消息语义。
所有这些都不是 Rust 特有的,但也适用于其他编程语言。
推荐阅读
- amazon-web-services - 如何终止到 elb 的 HTTPS 流量并且容器正在运行 HTTP (fargate)
- android - 设置 actionBarStyle 时状态栏不显示
- php - 如何将数据从 Html 按钮发送到 php 命令
- python - Python 只在棋盘的一行写一个值
- python-3.x - 将 NetworkX gpickle 从 S3 加载到 AWS lambda
- session - Vue:如何使组件提供有关登录用户对会话数据作出反应的信息?
- python - 带有 SettingWithCopyWarning 的熊猫
- r - 将csv从R写入excel时提取日期
- google-cloud-datastore - 试图在数据流模板中实现数据存储命名空间的运行时值
- google-app-engine - /var/www/ 位于 ubuntu 18.04 的 ftp 上的哪个位置?