2017-03-27 32 views
1

我们使用带有完成处理程序的Java nio AsynchronousServerSocketChannel来写入套接字通道。使用java套接字传输大量数据

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

我们倾向于传输相当庞大的数据。我们使用缓冲区大小16384以分块方式传输数据。通过UDP发送不是一个选项。

是否还有其他方法可以改善套接字通道的性能或减少传输的有效载荷?

最好的问候, Saurav

+0

您可以将其压缩。它会减小尺寸(显然),但我不确定整体性能。 –

+0

你可以使用一些压缩技术 – opensam

+0

使用一个很大的缓冲区,不要以分块的方式传输它。让TCP流,但它可以。使用大套接字发送和接收缓冲区。不要试图想出TCP。你不会的。 – EJP

回答

0

有一些你可以考虑的替代品。我希望您需要实施每项测试,并使用应用程序测试硬件的实际性能,以便选择正确的性能。

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

虽然细节取决于特定的环境中,你也许可以通过10倍(或者更多显著)在当前的套接字实现加快通信。

+0

感谢罗布您的回复...我喜欢内存映射文件的概念......但没有Java API支持非持久内存映射文件..我问这里的问题http://stackoverflow.com/questions/43190764/support - 适用 - 非持续,memorymappedfile – saurav