Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

104.WebSocket #104

Open
webVueBlog opened this issue Mar 5, 2023 · 0 comments
Open

104.WebSocket #104

webVueBlog opened this issue Mar 5, 2023 · 0 comments

Comments

@webVueBlog
Copy link
Member

webVueBlog commented Mar 5, 2023

WebSocket

什么是 WebSocket

WebSocket 是一种在单个TCP连接上进行全双工通信的协议。WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据

为什么需要 WebSocket?

HTTP 只能由客户端发起,不具备服务器推送能力,并且没有持久通信的能力。

大量的轮询请求会造成高开销,比如会带上多于的 header

和 HTTP 的相同点

都是基于 TCP,都是可靠性传输协议,都是应用层协议。

联系:建立握手时,数据是通过HTTP传输的,链接之后,真正传输数据时是不再需要HTTP协议。

和 HTTP 的差别

  1. WebSocket 双向通信,可以双向发送或接受信息,而 HTTP 是单向的。
  2. WebSocket是需要浏览器和服务器握手进行建立连接的,而http是浏览器发起向服务器的连接

HTTP/2 虽然具备服务器推送,但是 HTTP/2 只能推送静态资源,无法推送指定的信息。

如何判断在线离线

当客户端第一次发送请求至服务端时会携带唯一标识、以及时间戳,服务端到db或者缓存去查询改请求的唯一标识,如果不存在就存入db或者缓存中,
第二次客户端定时再次发送请求依旧携带唯一标识、以及时间戳,服务端到db或者缓存去查询改请求的唯一标识,如果存在就把上次的时间戳拿取出来,使用当前时间戳减去上次的时间,
得出的毫秒秒数判断是否大于指定的时间,若小于的话就是在线,否则就是离线;

断线重连

  1. websocket超时没有消息自动断开连接

可以使用心跳检测

客户端每隔一个时间间隔发生一个探测包给服务器
客户端发包时启动一个超时定时器
服务器端接收到检测包,应该回应一个包
如果客户机收到服务器的应答包,则说明服务器正常,删除超时定时器
如果客户端的超时定时器超时,依然没有收到应答包,则说明服务器挂了

  1. websocket异常包括服务端出现中断,交互切屏等等客户端异常中断

引入reconnecting-websocket.min.js,ws建立链接方法使用js库api方法

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant