使用Java套接字时,消息总是以缓冲区大小长度发送吗? (当我只发送 300 字节时,是否无论如何都会以 1024 字节大小的包发送?) 多大的缓冲区是最佳选择? 512 字节和 8k 字节大小有什么区别?
我不想创建几个线程,所以我会在这里问。 java 标准 tcp 服务器套接字性能是否足以以 10-20 msg/s 平滑处理 100 个连接?
最佳答案
大多数机器的 MTU 为 1500 字节。这意味着如果您发送其中的多个,它会将其分成数据包。如果少于这个,它可能会保留数据一小段时间,看看是否会发送更多数据,以减少发送小数据包的开销。有关更多信息,请参阅 Nagle 的算法。
一次发送 16 批 512 字节或 8 KB 的数据没有太大区别,因为操作系统和网络适配器默认会进行一些合并。
真正重要的是您和另一端之间的连接带宽。如果每秒最多有 2000 条消息且消息大小为 512 字节,则需要 10 Mbit/s 线路 (2000*512*8 = ~8 Mbit)
就数量而言,大约 10,000 个连接或每秒大约 500,000 条消息应该不会有问题。如果您有 1 Gbit/s 的线路,您应该能够轻松获得 100 MB/s 的速度。如果您有 10 Gbit/s 线路,您应该能够获得更多带宽,但除非您小心,否则您可能会在使用所有带宽时遇到麻烦。
关于 java 。它总是以缓冲区大小发送吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25824663/