-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
WebSocket
什么是 WebSocket
WebSocket 是一种在单个TCP连接上进行全双工通信的协议。WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据
为什么需要 WebSocket?
HTTP 只能由客户端发起,不具备服务器推送能力,并且没有持久通信的能力。
大量的轮询请求会造成高开销,比如会带上多于的 header
和 HTTP 的相同点
都是基于 TCP,都是可靠性传输协议,都是应用层协议。
联系:建立握手时,数据是通过HTTP传输的,链接之后,真正传输数据时是不再需要HTTP协议。
和 HTTP 的差别
- WebSocket 双向通信,可以双向发送或接受信息,而 HTTP 是单向的。
- WebSocket是需要浏览器和服务器握手进行建立连接的,而http是浏览器发起向服务器的连接
HTTP/2 虽然具备服务器推送,但是 HTTP/2 只能推送静态资源,无法推送指定的信息。
如何判断在线离线
当客户端第一次发送请求至服务端时会携带唯一标识、以及时间戳,服务端到db或者缓存去查询改请求的唯一标识,如果不存在就存入db或者缓存中,
第二次客户端定时再次发送请求依旧携带唯一标识、以及时间戳,服务端到db或者缓存去查询改请求的唯一标识,如果存在就把上次的时间戳拿取出来,使用当前时间戳减去上次的时间,
得出的毫秒秒数判断是否大于指定的时间,若小于的话就是在线,否则就是离线;
断线重连
- websocket超时没有消息自动断开连接
可以使用心跳检测
客户端每隔一个时间间隔发生一个探测包给服务器
客户端发包时启动一个超时定时器
服务器端接收到检测包,应该回应一个包
如果客户机收到服务器的应答包,则说明服务器正常,删除超时定时器
如果客户端的超时定时器超时,依然没有收到应答包,则说明服务器挂了
- websocket异常包括服务端出现中断,交互切屏等等客户端异常中断
引入reconnecting-websocket.min.js,ws建立链接方法使用js库api方法
Metadata
Metadata
Assignees
Labels
No labels