协议概述
《RFC 6455 - The WebSocket Protocol》
协议地址:https://datatracker.ietf.org/doc/html/rfc6455
一、包格式
二、数据传输单位为帧(Frame)
三、是否需要处理粘包和半包问题
从协议本身看不需要,因为传送的单位是帧,已经从底层去处理,具体的开发库有可能有问题
四、websocket的心跳检测(heartbeat)
假活着状态。尽管 WebSocket 在正常关闭连接时会触发 close 事件,但在某些异常情况下(如设备断电、网络中断、网络切换(WiFi切换到4G)、路由器重启、NAT 或防火墙超时断开连接等),该事件可能不会及时触发,甚至不会触发。此时连接已实际断开,但应用层仍误以为其存活。
为什么服务器端和客户端都需要各自的心跳机制?服务器端在复杂的网络环境中,同样无法主动感知各个客户端是否存活,因此也需要发送心跳,通过确认客户端的响应来判断其存活状态,从而处理服务器端的连接管理逻辑。
心跳机制的本质。判断连接是否真正存活的唯一可靠方式,就是看客户端发出的消息服务器能否收到并及时回应。心跳机制的本质,就是模拟这种消息收发的过程,理解这一点,也就真正理解了心跳的意义。
客户端和服务端的心跳机制。
1、服务端和客户端都有一套独立的心跳机制,两者独立运行。
2、服务端的心跳检测目的。服务器端的 ping/pong 是 WebSocket 协议层的自动机制,主要用来让服务器监测客户端的连接状态,处理服务器端的连接管理逻辑。
3、客户端的心跳检测目的。而客户端的心跳是应用层的自定义机制,需要开发者自行实现,帮助客户端感知自身连接状态,处理客户端自身的连接管理逻辑。
4、是否需要自己实现。在websocket中,服务端已自实现,在客户端需要开发者自行实现。