WebSocket
一般的web程序是client/server架构,也就是说服务器端不能主动给客户端发送数据。只有当客户端向服务端发送请求时,服务端才可以向客户端返回响应。但是很多场景下都需要服务端向客户端发送请求,比如进行服务推送。面对这种情况,一般的处理方案是客户端轮训服务端,客户端不断向服务端发送请求。这种方式的效率是十分底下,并且占用大量的计算资源,即包括客户端资源也包括服务器资源。
websocket的出现就是为了解决这个问题。websocket即web浏览器与web服务器之间全双工通信标准。其中,websocket协议有IETF定为标准,websocket API 由W3C 定为标准。
通信方式:
- 单工通信:单向传输
- 半双工通信:双向交替传输
- 全双工通信:双向同时传输
websocket的特征:
- 建立在tcp协议之上。
- 与http协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用http协议,因此握手时不容易屏蔽,能通过各种http代理服务器。
- 数据格式比较轻量,性能开销小,通信高效。可以发送文本,也可以发送二进制数据。
- 没有同源限制,客户端可以与任意服务器通信。
websocket重连机制:
定时发送心跳包,比如40s/次、60s/次等,具体可以根据应用场景来定,频率不宜太快,然后在网络状态由offline变为online时立即发送一次心跳,检测当前连接是否可用,不可用的话立即进行恢复处理。这样在大多数情况下,上层的应用通信都能较快从不可用状态中恢复,对于少部分场景,有定时心跳作为兜底,在一个心跳周期内也能够恢复。