2016-03-11 43 views
2

在客戶端和服務器之間使用WebSocket全雙工數據連接時,我保證,當從服務器發送兩條消息時,我將在客戶端接收到兩條完全相同的消息,其中一些是TCP不是Websockets消息完整性

換句話說,如果服務器反過來hello發送,然後its me,並在客戶端始終接收包含helloits me兩個消息或是否有可能在客戶端接收helloit然後s me或甚至一個像helloits me唯一的消息?

+0

看看這篇文章:http://stackoverflow.com/questions/20685208/websocket-transport-reliability-socket-io-data-loss-during-reconnection – JanR

+0

每個消息周圍都有分隔符;他們永遠不會像那樣組合。我不確定「保證」對您意味着什麼;規範是以某種方式寫的,丟失的數據包被重新發送,與數據報不同,但是它是互聯網,沒有後續驗證,很難確定客戶端是否從高級套接字獲得特定消息我們從JS使用的API。 – dandavis

回答

2

WebSocket最初有文本消息的開始和結束字節,但這是舊信息。 (2011年12月)框架中有一個長度分量。順便說一下,在框架規範中有一個標誌,指定該框架是整個「消息」還是「消息片段」,也就是說,還有其他框架組成這個「消息」。它直到接收器正確地合併片段以傳遞給應用程序代碼。通常情況下,除非你有非常大的「消息」(將WS「消息」看作「數據」而不是真正的消息...... WS實際上不是真正的「消息傳遞」協議本身),否則不必考慮這一點。

但是請注意,WebSocket是一個低級傳輸。把它想象成一個基於網絡的TCP。應用程序員應該使用「通過WS/WSS」的高級協議,而不必擔心訂購,重新連接,存在,發佈/訂閱,元組空間,保證交付等。如果我們不這樣做,幾十個和幾十個數十年的應用協議將被重新發明。

1

如果連接非常糟糕,您可能會丟失一條消息(但應該使用tcp重新發送消息),但不太可能以這種方式進行拆分。 每個文本消息都有邊界 - 開始(0x00)和結束(0xFF)字節。瀏覽器不應該混淆消息。 可能您可以以其他順序收到郵件。

你怎麼能更有把握:

  1. 添加您自己控制資金來消息(但事實上,它是開銷)。
  2. 使用wss(websockets + tls/ssl)協議 - 損壞的郵件不會被很好地解密。
+0

你有什麼資料可以找到更多的細節? – Magix

+1

只有RFC。 WebSockets碎片:https://tools.ietf.org/html/rfc6455#section-5.4 –

+0

如果我想在我的消息中發送0x00或0xFF怎麼辦? – Magix