背景
接上一篇博客tomcat版本做即时通讯的问题记载,我们抛出了以下几个问题。
- 单个tomcat的即时通讯有并发上线(200-1000)
- 前端关闭连接后端并不一定得到立即的响应,浪费资源,并造成消息丢包
- 通道被设备回收,前后端都不知情。导致前端消息发送不到后端,丢包。
这一篇博客,我们就是为了稳定的消息系统而来的。
首先,我们确认了后端单台服务器的处理能力有限,因此。我们需要做集群。其次我们为了不让前端关闭或回收,后端不响应。我们需要设置心跳,定时清除无关的连接。
最后,我们需要有消息确认机制,做到保证消息的100%接收。
解决方案
- 集群部署聊天(实现横向可扩展)
- 消息确认机制,确认消息稳定的送达
- 后端心跳处理不活跃的消息。
因此我们大概有下面这几个业务线需要处理
1.登陆-------->接收未读的消息-------->获取即时通讯地址------->连上即时通讯---------->开启心跳重连(http—>ws)
2.发送消息-------->后端保存消息,并尝试推送消息(http—>ws)
3.接收消息--------->告诉服务器确认接收(ws------>http)
4.后端开启定时没收到消息主动断线