firejq / MultiClientWebChat

基于 Spring Websocket 和心跳保活重连的多人网页聊天室

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

MultiClientWebChat

基于 Spring Websocket 和心跳保活重连的多人网页聊天室

Only for practice

Feature and Achieve

Schedule

  • Multiple client chat
  • Client reconnecting mechanism
  • Client keep alive and reconnect using heartbeat
  • MessageQueue broke

Multiple client chat

  • 当一个客户端打开,即建立一个与服务器的websocket连接,同时服务端将此 sessionId 加入到消息队列中
  • 当一个客户端发送信息时,服务器接收信息并将其广播给连接的所有客户端
  • 当一个客户端断开时,服务器将其从消息队列中移除

Client reconnecting mechanism

  • 若 client-server 通信发生中断,触发客户端onclose event,主动重连

Client keep alive and reconnect using heartbeat

存在这样的情况:

  • 超过一定的时间客户端和服务器之间没有发生任何消息传输,导致websocket连接自动断开。

  • websocket通信出错,但无法触发客户端 close 事件,导致客户端无法获知中断状况,编写在onclose中的重连逻辑也因此失效。

解决方法:设计客户端心跳保活+重连机制

客户端设置计时器,每次收到任何信息都将计时器归零,当计时器到时,发送一个心跳包(作用①保活,②检测连接状态),若服务器返回响应,则将计时器归零后重新启动;若服务器响应时间超时(认定为没有响应),则说明连接中断,执行重连逻辑。

MessageQueue broke

  • 使用专用消息队列作为消息中间层

About

基于 Spring Websocket 和心跳保活重连的多人网页聊天室

License:GNU Affero General Public License v3.0


Languages

Language:Java 49.3%Language:JavaScript 43.1%Language:HTML 5.5%Language:CSS 2.1%