我剛接觸網絡並詢問一個簡單的問題,這讓我很困惑。我希望有很多網絡知識的人可以提供幫助。位於一臺機器上或兩臺機器上的兩個進程的Java nio套接字通信
我始終將消息從進程A發送到進程B.如果A和B位於同一臺機器上,則平均端到端延遲爲〜6毫秒;如果A和B位於本地網絡中的兩臺機器上(由非常簡單的路由器連接),則平均端到端延遲爲〜176 ms。進程A和進程B使用java非阻塞套接字進行通信。每條消息都是10 KB,一條消息的消息副本將發送給不同的接收方。
另一個測試是改變消息副本的數量。在此測試中,有三個進程(A,B和C),其中進程A發送給進程B,進程B發送給進程C.如果發送一個消息副本,End2End延遲約爲10毫秒;如果連續發送兩個消息副本(20 KB),則end2end延遲爲147 ms;如果逐個發送四個消息副本(40 KB),則end2end延遲爲〜800 ms。 每1000毫秒發送一條新消息。
消息副本之間沒有延遲。當要發送的郵件副本數量增加時,爲什麼成本增長如此之快?這與我的網絡配置或我的編碼問題有關嗎?造成這種差異的原因是什麼?代碼
部分是在此鏈接:How to let selector that socketchannel key change in java nio
在開始的時候,我覺得它是緩慢的監守TCP緩衝區已滿,該過程必須等待當有新的空間來寫。在某些參考中,tcp的等待時間可能是200 ms。這對我的問題是否正確以及如何驗證?
這將有助於,如果你可以發佈一些代碼。 – r0ast3d
這聽起來像代碼是不完全正確的,所以它表現不如它可能。 –
我的代碼發佈在http://stackoverflow.com/questions/8107828/how-to-let-selector-that-socketchannel-key-change-in-java-nio。它可以工作,但表現不好。 – susan