/用户在线状态维护:/
1、即时通讯,经常需要知道用户是否在线,用户在线状态该如何保存变得尤为重要
2、用户状态保存是思路如下:
A、access服务器长连接客户端tcp,当用户上线后,上报用户上线请求至在线服务器,在线服务器进行更新状态至redis
B、用户主动下线,则通知在线服务器,在线服务器进行更新离线/安全退出状态至redis
C、因网络问题或者因心跳未更新(定时检测),客户端与服务器断开,则更新用户离线至在线服务器,在线服务器进行更新离线状态至redis
3、用户状态异常处理
A、当系统中没有在线状态服务器在线,则正常上报的状态都无法保存至redis,掉线用户无法更新,可以通过业务驱动进行修复在线问题,以下为主要方法:
①、在线状态服务器重启后,用户A给用户B发送消息,业务服务器发现B在线,而后转发消息至B的access服务器(如果此时B服务器不在线,则也需要相应服务器通知在线服务器,更新用户状态。),而B服务器的access服务器发现该用户已经下线,则该access服务器通知在线服务器,B用户已经掉线,在线服务器进行用户状态监测,如果保存的access服务器序号,链接conn_id为redis保存的内容,则更新离线状态至redis。如果不是,而且发现该用户为在线,则不进行更新,说明用户后来主动进行了登录,不能把用户状态记录为离线状态。(优点:服务器进行逻辑监控,缺点:逻辑复杂)
②、在线状态服务器停止后,用户上报用户状态至在线服务器,发现超时响应,则access服务器进行标志,说明服务器已经掉线,用户状态需要重新上报,因此,需要对所有用户默认为离线处理,在线服务器上线后,各个access服务器上报各自在线用户状态,针对在线用户重新写入在线。(优点:逻辑简单,缺点:在线状态服务器都不在线时,需要额外的服务器进行重置所有用户的状态。认为干预较多)
综上所述,使用了服务器检测模型,降低容错率。
用户在线状态维护
最新推荐文章于 2023-05-08 16:50:31 发布