【问题标题】:Transferring huge load of data using java sockets使用 Java 套接字传输大量数据
【发布时间】:2017-03-27 13:38:28
【问题描述】:

我们正在使用带有完成处理程序的 Java nio AsynchronousServerSocketChannel 来写入套接字通道。

套接字用于在同一系统中运行的两个进程之间进行本地通信。

我们倾向于传输大量数据。我们使用大小为 16384 的缓冲区以分块方式传输数据。不能通过 UDP 发送。

还有什么其他方法可以提高套接字通道的性能或减少传输的负载吗?

最好的问候, 索拉夫

【问题讨论】:

  • 你可以压缩它。它会减小尺寸(显然),但我不确定整体性能。
  • 你可以使用一些压缩技术
  • 使用很大的缓冲区,不要以分块的方式传输。让 TCP 尽可能流式传输它。使用大型套接字发送和接收缓冲区。不要试图超越 TCP。你不会的。

标签: java sockets


【解决方案1】:

您可以考虑多种选择。我希望您需要实现每一个并使用您的应用程序在硬件上测试实际性能,以便选择正确的。

  1. 您可以尝试调整您当前的方法。一些想法:更大的缓冲区,双缓冲区(使用两个套接字,因此写入器始终有一个可用于写入的套接字,而读取器始终可以读取),仅发送差异(如果您不断发送和更新数据版本),压缩等。
  2. 使用完全不同的方法,例如共享内存或内存映射文件。几个问题有很多很好的答案,可以帮助您入门:thisthat

虽然细节取决于您的特定环境,但您可能可以将通信速度提高 10 倍(或者可能比当前的套接字实现更高)。

【讨论】:

猜你喜欢
  • 2010-11-13
  • 1970-01-01
  • 2020-06-26
  • 2011-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-23
  • 1970-01-01
相关资源
最近更新 更多