websocket消息会丢失吗?
2022-09-02 13:05:53
我目前正在开发一个Java WebSocket客户端应用程序,我必须确保客户端接收来自服务器的每条消息。是否有可能由于连接中断而丢失某些消息(一旦从服务器发送)?WebSocket是基于TCP的,所以这不应该发生对吧?
我目前正在开发一个Java WebSocket客户端应用程序,我必须确保客户端接收来自服务器的每条消息。是否有可能由于连接中断而丢失某些消息(一旦从服务器发送)?WebSocket是基于TCP的,所以这不应该发生对吧?
这是可能发生的。TCP保证数据包的顺序,但这并不意味着从服务器发送的所有数据包都到达客户端,即使底层网络中发生了不可恢复的故障。想象一下,当您的应用程序与服务器通信时,有人在最坏的时候拔出您的LAN电缆或关闭您的WiFi接入点。TCP无法克服这样的麻烦。
为了确保从服务器发送的每条 WebSocket 消息都到达客户端,您必须在应用程序层中实现某种 SYN/ACK。
TCP是一种有保证的协议 - 数据包将由远端的较高应用程序级别以正确的顺序接收(这与UDP相反,UDP是发送和希望协议)。
一般来说,TCP应该用于所有数据必须正确到达远端的连接。UDP 用于丢失数据包可以丢弃而没有重大问题的情况(例如,流媒体服务、NTP 更新)