2017-03-27 30 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