【问题标题】: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 的线路,您应该能够获得更多,但除非您小心,否则您可能无法使用所有带宽。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-16
      • 2012-09-21
      • 2015-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多