openfire 源码分析 session & connection
2014-10-10 10:18
316 查看
今天学习openfire的 connect, session, sessionManager, routingtable
创建连接的入口在 org.jivesoftware.openfire.nio.ConnectionHandler.sessionOpened中
sessionOpened 做的事情有 生成一个xmlParser、NIOConnection, StanzaHandler
1.connect
NIOConnection 类实现org.jivesoftware.openfire.Connection接口
Connection 接口负责发送报文,获取hostAddress,hostName,开始tls连接,一些判断等。
发送报文使用的ioSession 实现的。
2.session
每一个stanzaHandler 中都含有一个session, 下图是整个client session的结构图
LocalClientSession 构造参数有 serverName, xmlParser, connector
ChannelHandler, RoutableChannelHandler, Session, ClientSession 都是接口,他们之间的关系如下
ChannelHandler
动作是处理报文
RoutableChannelHandler extends ChanneHandler
RoutableChannelHandler 的主要动作是获取JID
Session extends RoutableChannelHandler
Session 主要动作是发送字符串,处理报文,获取连接信息和一些连接是否正常的判断
ClientSession extends Session
ClientSession 主要动作是设置用户聊天是设置和使用的策略,获取用户名,获取和设置用户当前状态Presence,当前用户是否为匿名用户
LocalSession implements Session
LocalSession 是一个抽象类,主要扩展了发送和接收数据包数量的统计功能,保存和获取会话一些的数据,获取connection
LocalClientSession extends LocalSession implements ClientSession
LocalClientSession 是LocalSession 实现类
构造方法需要的参数有serverName, connection,streamId
LocalClientSession 增加了AuthToken 属性,即验证类
在session验证以后,设置AuthToken 的处理逻辑如下
设置jid,设置authToken,设置session已经验证过的状态,设置默认聊天策略列表,调用sessionManager.addSession(this)方法
addSession(Session) 方法中从PreAuthenticatedSessions 中删除session, 向路由表中增加session, 发送session创建成功通知
3.routingtable
RoutingTable是一个接口,提供主要方法是jid和session 键值对的增删查, 发送广播消息,获取服务器的名称,获取服务器session个数。判断是否含有session,路由发包。
接口主要对三类session进行操作, clientRoute, componentRoute, serverRoute
routingtable的主要方法如图所示:
实现类 RoutingTableImpl extends BasicModule implements RoutingTable, ClusterEventListener
4.sessionManager
主要实现的功能有 创建、获取、删除 clientSession, componentSession, serverSession, 发送广播消息,加入集群
创建连接的入口在 org.jivesoftware.openfire.nio.ConnectionHandler.sessionOpened中
sessionOpened 做的事情有 生成一个xmlParser、NIOConnection, StanzaHandler
1.connect
NIOConnection 类实现org.jivesoftware.openfire.Connection接口
Connection 接口负责发送报文,获取hostAddress,hostName,开始tls连接,一些判断等。
发送报文使用的ioSession 实现的。
2.session
每一个stanzaHandler 中都含有一个session, 下图是整个client session的结构图
LocalClientSession 构造参数有 serverName, xmlParser, connector
ChannelHandler, RoutableChannelHandler, Session, ClientSession 都是接口,他们之间的关系如下
ChannelHandler
动作是处理报文
RoutableChannelHandler extends ChanneHandler
RoutableChannelHandler 的主要动作是获取JID
Session extends RoutableChannelHandler
Session 主要动作是发送字符串,处理报文,获取连接信息和一些连接是否正常的判断
ClientSession extends Session
ClientSession 主要动作是设置用户聊天是设置和使用的策略,获取用户名,获取和设置用户当前状态Presence,当前用户是否为匿名用户
LocalSession implements Session
LocalSession 是一个抽象类,主要扩展了发送和接收数据包数量的统计功能,保存和获取会话一些的数据,获取connection
LocalClientSession extends LocalSession implements ClientSession
LocalClientSession 是LocalSession 实现类
构造方法需要的参数有serverName, connection,streamId
LocalClientSession 增加了AuthToken 属性,即验证类
在session验证以后,设置AuthToken 的处理逻辑如下
设置jid,设置authToken,设置session已经验证过的状态,设置默认聊天策略列表,调用sessionManager.addSession(this)方法
addSession(Session) 方法中从PreAuthenticatedSessions 中删除session, 向路由表中增加session, 发送session创建成功通知
3.routingtable
RoutingTable是一个接口,提供主要方法是jid和session 键值对的增删查, 发送广播消息,获取服务器的名称,获取服务器session个数。判断是否含有session,路由发包。
接口主要对三类session进行操作, clientRoute, componentRoute, serverRoute
routingtable的主要方法如图所示:
实现类 RoutingTableImpl extends BasicModule implements RoutingTable, ClusterEventListener
4.sessionManager
主要实现的功能有 创建、获取、删除 clientSession, componentSession, serverSession, 发送广播消息,加入集群
相关文章推荐
- OpenSessionInViewFilter源码分析
- awk读取标准输入的讨论&awk源码读取输入部分分析
- openstack nova 源码分析5-4 -nova/virt/libvirt目录下的connection.py
- 怎样面对凌乱的代码:源码分析利器Source Insight
- ecshop 二次开发,源码分析
- [源码分析]Community Server的Job & Timer
- Nginx学习笔记(五) 源码分析&内存模块&内存对齐
- openstack nova 源码分析5-2 -nova/virt/libvirt目录下的connection.py
- openstack nova 源码分析5-1 -nova/virt/libvirt目录下的connection.py
- Tor源码文件分析 -- Connection_OR
- HashTable & HashSet 源码分析
- ClientAbortException: java.net.SocketException: Connection reset by peer: socket write error"异常原因分析
- openfire源码入门级分析
- openstack nova 源码分析5-3 -nova/virt/libvirt目录下的connection.py
- stl map insert(const value_type& _Val)源码分析及图示
- 用户行为分析解决方案–Session&Tracker
- PHP源码分析-变量的引用计数、写时复制(Reference counting & Copy-on-Write)
- LDD3源码分析之与硬件通信&中断处理
- Linux usb设备驱动(2)---> usbmouse.c 源码分析
- Nginx学习笔记(四) 源码分析&socket/UDP/shmem