2012-03-11 55 views
2

我可以在任何地方找到任何documentatin,並且想知道什麼是儘可能快地發送多個消息的最佳方法。使用TCP套接字可以更快地發送多個小消息或更少的消息

例如,如果我有300臺設備從一臺服務器接收消息,發送一條大消息並讓設備挑選出他們需要的部件或發送300條消息,但尺寸只有1/300,會更好。它們只會是小刺,所以300個惡魔每個只能得到6個字節

它有什麼區別?

謝謝先進。

+1

當你說「一個大消息」,用TCP你需要發送這個「一個大消息」*每個*設備單獨。使用TCP時不能廣播消息(但可以使用UDP)。 – 2012-03-11 01:09:09

回答

1

如果套接字的Nagle算法已啓用,那麼通過給定連接發送多個較小的消息通常比在同一連接上發送較少的較大消息要慢。 Nagle在內部緩衝出站數據,並且必須等待足夠的數據被緩存和/或超時,以便它可以發送有效的消息。對於一般的套接字使用,啓用Nagle通常是首選,因爲它提供了大多數應用程序都能接受的速度,性能和開銷之間的良好平衡。但是,如果您需要發送時間敏感的消息,那麼您通常必須禁用Nagle,因此每條消息都會盡快單獨傳輸。但是,您描述的有關將單個消息發送到多個設備的描述對於TCP來說是不可能的。推測這些設備每個都有自己的與服務器直接連接的TCP連接。要發送一條消息到所有300個連接,您必須製作300個獨立的消息副本,每個連接一個。 TCP沒有廣播功能(如果需要,可切換到UDP或多播)。發送單個服務器消息並且有300個設備響應它的唯一方式是如果設備沒有直接連接到服務器,而是通過代理進行通信,該代理與服務器保持單一連接並將接收到的服務器消息轉發給每個服務器消息設備根據需要。

+0

這聽起來像他有300個連接,但希望廣播所有連接上的數據與每個連接獨有的單個消息。這聽起來對我來說毫無意義,因爲你會將發送的數據乘以一個數量級! – fido 2012-03-11 01:24:42

+0

我在想廣播。我以爲你可以用TCP來完成,但我想我不得不查看UDP,如果我不發送單個消息。我希望儘可能快地接收消息,這樣每個人都可以在幾乎實時的時間內接收消息,而不會有太多延遲 – NickREd 2012-03-11 13:35:52

相關問題