openfire 源码分析 session & connection

阅读更多

今天学习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

    openfire 源码分析 session & connection_第1张图片

 

    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的主要方法如图所示:

openfire 源码分析 session & connection_第2张图片

    实现类 RoutingTableImpl extends BasicModule implements RoutingTable, ClusterEventListener

 

4.sessionManager

    主要实现的功能有 创建、获取、删除 clientSession, componentSession, serverSession, 发送广播消息,加入集群

 

  • openfire 源码分析 session & connection_第3张图片
  • 大小: 18 KB
  • openfire 源码分析 session & connection_第4张图片
  • 大小: 6.3 KB
  • 查看图片附件

你可能感兴趣的:(openfire)