2014-09-13 23 views
0

使用Java套接字時,msg是否始終以緩衝區大小長度發送? (當我發送只有300bytes,無論如何發送包例如1024字節大小?) 什麼大小的緩衝區是最好的選擇?在512字節和8k字節大小之間有什麼區別?Java。它總是發送緩衝區大小?

我不想創建幾個線程,所以我會問這裏。 java標準的tcp serversocket性能足夠處理100個連接,10-20 msg/s的流暢嗎?

回答

1

大多數機器的MTU爲1500字節。這意味着如果你發送一些這樣的數字,它會將它分解成數據包。如果您的數據少於此數據,它可能會在短時間內保存數據,以查看是否會發送更多數據以減少發送小數據包的開銷。請參閱Nagle的更多。

由於操作系統和網絡適配器會默認進行一些合併,因此一次發送16個512字節或8 KB的所有塊沒有多大區別。

真正重要的是您與另一端之間的連接帶寬。如果每秒有2000條消息並且它們是512字節,則需要10 Mbit/s的線路(2000 * 512 * 8 =〜8 Mbit)

就數字而言,您應該沒有問題多達約10,000個連接,或每秒約500,000個msg。如果你有1 Gbit/sec的線路,你應該能夠輕鬆獲得100 MB/s。如果您擁有10 Gbit/s線路,您應該可以獲得更多,但除非您小心,否則在使用所有帶寬時可能會遇到困難。