java - 构建套接字通信以最小化数据传输

标签 java python tcp byte

我正在开展一个项目,该项目将在带宽受限网络(蜂窝网络)上使用客户端设备。我不太熟悉套接字通信,但我已经弄清楚如何使用 Java 作为服务器(来自 this 教程),而 Python 是客户端语言。

我将从有限数量的命令(少于 50 个)发送“执行命令”,但有时我也需要发送更长的命令集,为客户提供 future 的规则/条件。我的想法是为每个命令发送一个字节,其中一个字节表示还有更多命令。这是正确的方法吗,还是我应该继续写入套接字输出(我猜它是 utf-8,如果我没记错的话,它是 3bytes/char)。

感谢您的输入, 詹姆斯

最佳答案

在尝试优化网络带宽时,您应该牢记两点。

首先是每次要与对等方通话时必须传输大约 40 字节的开销。这只是 IP 固有的。试图将通信缩小到单个字节通常是一种错误的经济。您应该做的是充分利用往返:将消息与对等方可能以后需要的尽可能多的附加数据相结合。在有限的范围内,Nagle 算法已经为简单的服务解决了这个问题,延迟数据包,直到对等方实际表明它已准备好接收更多数据,这通常就足够了。

第二个是,在典型的 MTU 规模下,几乎不可能设计出比使用通用压缩隧道传输的更简单协议(protocol)更节省空间的未压缩二进制协议(protocol)。没有“压缩二进制 http”,因为 gzip 压缩的 ascii 传输编码无论如何都会打败它。当带宽是一个问题时,总是包括压缩。剩下的就是确保您的协议(protocol)“易于”压缩。

关于java - 构建套接字通信以最小化数据传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6850911/

相关文章:

java - Webstart如何确定主类?

java - 为什么我的代码跳过第一个日期来查找第二天?

python - 用于CUDA的Numba.vectorize:返回数组的正确签名是什么?

python - 去抖 celery 任务?

c++ - 只关闭一个套接字

tcp - 使用 libnids 捕获和组装 TCP 流

java - 使用 Couchbase Java SDK 创建管理员用户

java - 如何在不添加尾随逗号的情况下用逗号连接一堆数字?

python - 类型错误,因为列表索引必须是整数或切片,而不是元组

.net - 是否保证多个发送线程的 WCF TCP 消息顺序正确?