【问题标题】:Java. Is it always send with buffer size?爪哇。它总是以缓冲区大小发送吗?
【发布时间】:2014-09-13 15:25:00
【问题描述】:
当使用 Java 套接字时,msg 是否总是以缓冲区大小长度发送? (当我只发送 300 字节时,它是否还是以包的形式发送,例如 1024 字节大小?)
什么大小的缓冲区是最好的选择? 512 字节和 8k 字节大小有什么区别?
我不想创建几个线程,所以我会在这里问。 java 标准 tcp serversocket 性能是否足以处理 100 次 10-20 msg/s 的连接?
【问题讨论】:
标签:
java
multithreading
sockets
buffer
serversocket
【解决方案1】:
大多数机器的 MTU 为 1500 字节。这意味着如果您发送其中的多个,它将把它分成数据包。如果少于这个,它可能会在短时间内保留数据,看看是否会发送更多数据,以减少发送小数据包的开销。有关更多信息,请参见 Nagle 的算法。
一次发送 16 批 512 字节或 8 KB 并没有太大区别,因为默认情况下操作系统和网络适配器会进行一些合并。
真正重要的是您与另一端之间的连接带宽。如果您每秒最多有 2000 条消息并且它们是 512 字节,则需要一条 10 Mbit/s 的线路(2000*512*8 = ~8 Mbit)
就数字而言,最多 10,000 个连接或每秒约 500,000 个消息应该不会有问题。如果您有 1 Gbit/sec 的线路,您应该能够轻松获得 100 MB/s。如果您有 10 Gbit/s 的线路,您应该能够获得更多,但除非您小心,否则您可能无法使用所有带宽。