我目前正在開發一個Java WebSocket客戶端應用程序,我必須確保來自服務器的每條消息都被客戶端接收。由於連接中斷,是否有可能丟失一些消息(一旦從服務器發送它們)? WebSocket基於TCP,所以這不應該發生嗎?websocket消息是否會丟失?
2
A
回答
6
它可能發生。 TCP保證數據包的順序,但並不意味着即使在底層網絡中發生不可恢復的故障時,從服務器發送的所有數據包也會到達客戶端。想象一下,當應用程序與服務器進行通信時,有人會在最差的時機拔出LAN電纜或關閉WiFi接入點。 TCP沒有克服這樣的麻煩。
爲確保從服務器發送的每個WebSocket消息到達客戶端,必須在應用程序層實現某種SYN/ACK。
0
TCP是一個有保證的協議 - 數據包將按照遠端的更高應用級別(這與發送和希望協議UDP相對)以正確的順序接收。
一般來說TCP應該用於所有數據必須在遠端正確到達的連接。 UDP用於丟棄丟失的數據包而不會出現明顯問題(例如流媒體服務,NTP更新)
0
TCP有所謂的控制流程 - 這意味着它提供可靠的,有序的和錯誤檢查的傳遞。換句話說,TCP是一種不斷檢查數據是否到達的協議。
該協議有不同的機制來確保。 您可以在下面的鏈接中看到TCP和UDP(沒有控制流)之間的區別。
相關問題
- 1. 消息隊列:網絡故障時消息是否丟失?
- 2. Websockets消息丟失
- 3. Netty的WebSocket消息是否被壓縮?
- 4. Firefox是否有WebSocket消息限制?
- 5. 是否可以編碼WebSocket消息?
- 6. Spring WebSocket - 被控制器發送後丟失的消息
- 7. 龍捲風websocket客戶端丟失響應消息?
- 8. WebSocket消息在客戶端重新連接時丟失
- 9. 芹菜和丟失消息
- 10. Spring JMSTemplate - 丟失的消息
- 11. linphone SIP消息丟失
- 12. RabbitMQ正在丟失消息
- 13. RabbitMQ中的消息丟失
- 14. Android C2DM消息丟失了?
- 15. 接收udp消息丟失
- 16. lua_pcall錯誤消息丟失
- 17. CodeIgniter丟失會話信息
- 18. NSMutableURLRequest丟失會話信息
- 19. PHP會話丟失信息
- 20. 會話信息丟失
- 21. 爲什麼Amazon SQS消息丟失消費者不會收到消息
- 22. 向此表添加信息是否會使其丟失3NF
- 23. DataOutputStream,是否會丟失一些位
- 24. Websocket聊天消息不會延長HttpSession
- 25. 爲什麼記錄大量消息時NLog會丟失一些消息?
- 26. 握手websocket在握手過程中發送沒有消息丟失
- 27. 如果我的函數在處理它時失敗,是否會丟失System.MessageQueue(MSMQ)消息?
- 28. ZeroMQ PUSH/PULL並丟失消息
- 29. RxJava異步訂閱將丟失消息
- 30. 重新配置NServiceBus丟失消息
您要麼收到該消息,要麼完全失去連接。 – immibis
但是,我完全失去了連接後,websocket clientEndpoint不再工作了嗎?這就是爲什麼我建立了一個重新連接處理程序,每隔30秒發送一次ping/pong消息來檢查連接是否仍然運行,如果不是,它會嘗試創建到服務器的新連接。 –