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