OpenFire源码学习之二十三:关于消息的优化处理

本文深入探讨OpenFire的消息处理机制,分析其存在的问题,如登录时的用户验证、好友花名册同步、消息回执缺失及离线消息表的性能瓶颈。并提出解决方案,包括禁用无效的用户验证方法,使用Redis预存用户数据,以及优化聊天室成员同步流程,以提升系统性能和用户体验。
摘要由CSDN通过智能技术生成

消息处理

之前有说过,openfire的消息处理策略本人并不是很喜欢。先看下openfire上脱机消息策略。


个人认为消息关于会话的消息,用户的存储量应该无限大。服务器不应该被消息吃撑了。所谓聊天通讯,这一关很重要。

Openfire的消息是什么流程呢。

1、当用户登陆连接的时候。握手、认证、绑定资源、获取花名册、获取离线消息。

2、服务端会查找关系型数据库。经本人测试离线消息在数据库表中达到100万条以上的时候,查询速度非常慢,甚至会导致openfire奔溃。

.....

 

那么openfire在消息这块会有哪些不足之处呢。本人认为有一下几点:

1)用户登陆的时候需要验证用户的可效性。又一次需要查询数据库,而本人认为这一步没

   必要。可以删掉

2)用户每次登陆都需要重新获取自己的好友花名册。这样导致数据访问次数过多,服务端

push消息的量也增多。导致登陆流程很慢

3)用户发送的消息,没有回执。就是说A发送消息给B。而B又一致不回复。所以对于客

   户端A来讲压根不知道消息是否发送成。然而S(服务端)接收到A的消息转发给B的时

   候,B也不做回执。所以S也不知道消息到底是否成功到达。

4)用户的离线消息表访问峰值时,系统可能会奔溃。

 

针对上面的问题,下面一一做解答。

用户校验

问题1:比较简单。在DefaultLockOutProvider中有一个getDisabledStatus方法。该方法判断用户的可效行。禁用这个方法则可。

源码如下:

    public LockOutFlag getDisabledStatus(String username) {
        if (username == null) {
            throw new UnsupportedOperationException("Null username not allowed!");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值