2015-09-09 184 views
2

我目前正在開發一個Java WebSocket客戶端應用程序,我必須確保來自服務器的每條消息都被客戶端接收。由於連接中斷,是否有可能丟失一些消息(一旦從服務器發送它們)? WebSocket基於TCP,所以這不應該發生嗎?websocket消息是否會丟失?

+0

您要麼收到該消息,要麼完全失去連接。 – immibis

+0

但是,我完全失去了連接後,websocket clientEndpoint不再工作了嗎?這就是爲什麼我建立了一個重新連接處理程序,每隔30秒發送一次ping/pong消息來檢查連接是否仍然運行,如果不是,它會嘗試創建到服務器的新連接。 –

回答

6

它可能發生。 TCP保證數據包的順序,但並不意味着即使在底層網絡中發生不可恢復的故障時,從服務器發送的所有數據包也會到達客戶端。想象一下,當應用程序與服務器進行通信時,有人會在最差的時機拔出LAN電纜或關閉WiFi接入點。 TCP沒有克服這樣的麻煩。

爲確保從服務器發送的每個WebSocket消息到達客戶端,必須在應用程序層實現某種SYN/ACK。

0

TCP是一個有保證的協議 - 數據包將按照遠端的更高應用級別(這與發送和希望協議UDP相對)以正確的順序接收。

一般來說TCP應該用於所有數據必須在遠端正確到達的連接。 UDP用於丟棄丟失的數據包而不會出現明顯問題(例如流媒體服務,NTP更新)

0

TCP有所謂的控制流程 - 這意味着它提供可靠的,有序的和錯誤檢查的傳遞。換句話說,TCP是一種不斷檢查數據是否到達的協議。

該協議有不同的機制來確保。 您可以在下面的鏈接中看到TCP和UDP(沒有控制流)之間的區別。

Difference between tcp and udp