前言:
目前我们的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发出去的包的地方,若发不出去,则关