2013-01-08 84 views
-1

如何通過套接字傳輸消息時確保消息順序的正確性?是否有任何特定的設計要遵循?請建議一些方法...確保套接字失敗時消息順序的正確性?

+0

你的問題不清楚。你在考慮什麼命令? –

+0

你使用什麼樣的套接字和連接/協議?基於IP的TCP是面向連接的,應確保您的訂單正確。但這取決於你在做什麼以及你如何使用它。 –

+0

使用TCP(與您自己的消息邊界)或SCTP? – harold

回答

0

TCP按發送的順序傳遞數據。 UDP不。如果你有一個導致TCP失敗的錯誤,這是非常罕見的,你必須重新開始。 UDP不保證傳送,因此您需要在其上添加協議來請求重新傳輸並應用排序。使用TCP或做自己的序列檢查。

1

如果它是一個TCP套接字,則支持丟棄的數據包等自動構建到TCP堆棧中。您不需要做任何事情,除非注意丟棄的數據包可能導致數據包重新發送時出現短暫的閃爍。這種情況一直髮生:沒有人注意到(除了寫開關等的人)。

如果您嘗試處理完全中斷的連接:這取決於您的協議。如果你正在做每個消息的請求/響應,那麼很簡單 - 但你需要付出很多的延遲開銷。有些協議在請求/響應方面完全獨立工作(每次發送請求時,您都不會停止響應 - 您只是不斷髮送請求,並且響應將在未來的某個時刻返回)。在那個設置中,你將不得不圍繞它設計:或許到最後的已知的響應,但這仍然意味着有些事情可能在沒有你回聽的情況下被處理。所以:你可能想讓所有行爲都安全地重複,所以如果你發送了它,但是不知道它是否完成,你可以再次發佈它。

如果你使用的是UDP,那麼答案「完全是你;這是你的問題;你需要弄清楚」,這通常意味着在每個數據包中嵌入一個序列號。當然,如果你使用的是UDP,你可能會設計成只允許允許丟棄的數據包,並在未來很快重新同步。