openfire源码解读之将cache和session对象移入redis以提升性能

本文探讨了openfire服务器性能提升的方法,着重分析了将cache和session迁移到redis以增加服务器承载能力的策略。文章详细介绍了openfire的缓存机制和session管理,并分享了使用JSON序列化实现cache和session在redis中存储的可行性研究。
摘要由CSDN通过智能技术生成

前言:

目前我们的openfire服务器只能支撑单机2W 集群4W.(估测在线用户数已经7.8W了)

内存25G,已经去除了好友关系(我们的场景是设备控制,消息推送,无需好友关系,)

在此情况下我们需要研究出单节点25G能够支撑5W甚至更多.

并且目前感觉openfire还是有些问题的,但是无法测出来(tsung完全测不出来,500M内存在线5.6W...)

那么修改openfire哪些地方来扩容呢?


———————————————————————罪恶的分割线—————————————————————


一.cache  缓存机制

位置:org.jivesoftware.util.cache


CacheFactory:里面定义了管理控制台可以看到的所有的cache及其他的cache,其默认设置,

CacheFactoryStrategy:定义了缓存工厂的策略模式,即当没有开启集群的时候适用默认的CacheFactory,当启动集群则适用ClusterCacheFactory


场景:

为了扩大容量支撑更多用户,我们需要把几个大的cache移入redis,让redis来管理cache.

问题提出:

根据这个cache,我们可以把这个cache移植到redis里面吗?如何实现呢?后面补上



———————————————————————罪恶的分割线—————————————————————

二.建立session

1.消息接收:
package org.jivesoftware.openfire.nio[ConnectionHandler] line165:messageReceived()

2.处理包:process packet
<org.jivesoftware.openfire.net>[SocketPacketWriteHandler]line:56---process

3.上线创建session
package org.jivesoftware.openfire.nio[ConnectionHandler]-sessionOpened()

4.下线关闭session
package org.jivesoftware.openfire.nio[ConnectionHandler]-sessionClosed()

5.当一个会话 某段时间内没做任何动作,则被视为idle,每过一段时间,openfire会给这些idle的会话发送一个空包,即ping。若正常的连接,会收到返回的值,不做任何事情。若是死连接,则openfire会断开连接
org.jivesoftware.openfire.nio[ConnectionHandler]-sessionIdle()
org.jivesoftware.openfire.nio[ClientConnectionHandler]-sessionIdle()

ps:package org.jivesoftware.openfire.nio[NIOConnectionHandler] deliver即是ping发出去的包的地方,若发不出去,则关

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值