默认
发表评论 3
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
求教netty服务挂了,但路由层的用户信息还保存着在线状态怎么更新?
阅读(17099) | 评论(3 收藏 淘帖1
一台netty服务器 一台逻辑服务器。用户登录netty成功后,把路由关系绑定到redis中,逻辑服务通过路由关系判断用户是否在线,读的是redis。
netty服务器如果不宕机,会有心跳检测自动去清理掉redis的路由,但是如果netty挂了,用户的路由信息不就一直存在了吗?怎么解决这个问题

即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

上一篇:求教IM离线消息,单聊和群聊是存一张表好还是分开存?下一篇:求教,IM系统服务端是否需要用专用的数据库?

本帖已收录至以下技术专辑

推荐方案
评论 3
这就是分布式状态一至性难搞的地方。
你这种情况下,如果没有心跳了,应该有机制能自动清除redis中的状态,比如设置自动超期,心跳机制用来续期等等策略。
总之,这种状态一致性问题,要考虑的边界情况很多
你可以把在线状态信息用个redis过期key去存,每次和客户端心跳延长这个key的过期时间,还有就是 不用管,一般实现上客户端会检测连接断掉自动重连,重连到可用的服务器,这样重连会覆盖旧的路由信息,不重连或者重连失败也没关系,你按原路由信息推送,客户端也收不到,本身客户端也离线,最终结果都是收不到,效果是一样的
引用:zhxh007 发表于 2022-12-30 18:04
你可以把在线状态信息用个redis过期key去存,每次和客户端心跳延长这个key的过期时间,还有就是 不用管,一 ...

专业
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部