`
youzifei
  • 浏览: 66726 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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

    session

 

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

RoutingTable

    实现类 RoutingTableImpl extends BasicModule implements RoutingTable, ClusterEventListener

 

4.sessionManager

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

 

  • 大小: 18 KB
  • 大小: 6.3 KB
分享到:
评论

相关推荐

    Openfire源码分析

    网上的openfire源码分析,整理成了本地文件,方便查看。作者的博客在此:https://www.cnblogs.com/Fordestiny/p/7462745.html

    openfire 源码 Eclipse部署

    ### Openfire源码在Eclipse中的部署步骤详解 #### 一、概述 本文将详细介绍如何在Eclipse开发环境中部署Openfire源代码。Openfire是一款基于XMPP协议的即时消息服务器,由Ignite Realtime组织开发并维护。由于其...

    openfire源码

    通过分析源码,可以学习如何构建高性能、可扩展的服务器架构。 4. **数据库操作**:Openfire使用JDBC与数据库交互,存储用户信息、聊天记录等数据。了解SQL查询和数据库设计模式对于理解数据存储至关重要。 5. **...

    openfire消息机制和源码分析

    标题中提到的“Openfire消息机制和源码分析”指的是对开源即时通讯服务器Openfire内部消息处理机制的详细探讨和源代码的解读。Openfire是一个基于XMPP(Extensible Messaging and Presence Protocol)协议的服务器端...

    openfire源码部署开发

    ### Openfire源码部署开发详解 #### 一、Openfire简介 Openfire是一款开源的即时通讯服务器,基于XMPP协议栈。它支持多种客户端,并且能够处理大量的并发连接。Openfire以其灵活性、可扩展性和易用性而受到广泛欢迎...

    openfire3.9.1 源码部署及运行

    在本文中,我们将深入探讨如何部署和运行Openfire 3.9.1的源码,以及在这个过程中可能遇到的关键知识点。 首先,我们需要从官方网站下载Openfire 3.9.1的源代码。这通常是一个.zip或.tar.gz格式的压缩包,包含所有...

    openfire的connection_manager

    7. **性能监控**:`connection_manager`还可能提供监控功能,收集连接相关的统计信息,帮助管理员分析服务器性能,发现并解决问题。 通过研究和配置`connection_manager`,开发者和系统管理员可以提升Openfire的...

    openfire-4.5.0源码

    三、源码关键模块分析 1. 用户管理:`user`模块是Openfire处理用户账户的地方。它包含用户注册、登录验证、密码重置等逻辑。源码中,`UserManager`和`AuthProvider`接口及其实现类揭示了用户数据的存储和验证机制。...

    Openfire源码部署与开发.doc

    ### Openfire源码部署与开发知识点详解 #### 一、Openfire简介 Openfire是一款开源的实时通信服务器,基于XMPP协议。它提供了一个高效、可扩展的消息传递平台,适用于企业级即时通讯应用。Openfire支持多种客户端接...

    openfire xmpp协议源码

    《Openfire与XMPP协议在Android即时通讯中的应用解析》 Openfire是一款开源的服务器软件,它基于XMPP(Extensible Messaging and Presence Protocol)协议,为实时通信提供了一个强大而灵活的平台。XMPP,原名为...

    openfire3.9.3 源码部署安装文档

    OpenFire 3.9.3 源码部署安装指南 OpenFire 是一个基于 XMPP 协议的即时通讯服务器,它提供了实时的消息传递、文件传输、音视频会议等功能。下面是 OpenFire 3.9.3 源码部署安装的详细步骤: 一、准备阶段 1. ...

    openfire源码缺少的bouncycastle.jar包

    Openfire是一款开源的即时通讯(IM)服务器,它基于XMPP协议,用于构建实时通信系统。...当发现Openfire源码缺少bouncycastle.jar包时,及时添加相应版本的库可以解决相关问题,确保系统的稳定性和安全性。

    编写Openfire开发插件、部署源码

    4. **下载Openfire源码和安装程序**:从IgniteRealtime官方网站下载Openfire的安装程序和源代码。 5. **导入Openfire源文件到Eclipse**:将解压后的`openfire_src`文件夹复制到Eclipse的工作空间,然后在Eclipse中...

    openfire spark 2.7.0源码

    源码分析可以帮助我们深入了解其工作原理和定制化需求。 1. **XMPP协议**:Spark是基于XMPP(Extensible Messaging and Presence Protocol)协议的,这是一种XML流协议,用于实现实时通讯。理解Spark源码需要对XMPP...

    第一个openfire插件源码及说明

    Openfire是一款开源的即时通讯(IM)服务器,它基于XMPP协议,允许用户进行实时通信和协作。在Openfire中,插件是扩展其功能的关键方式。本教程将引导初学者了解如何开发第一个Openfire插件,从而深入理解Openfire的...

    openfire4.1.3源码part1

    openfire4.1.3源码,最近GitHub下载很慢,通过代理完成下载,上传资源共大家分享。受限上传大小分包压缩,第二包免费。

Global site tag (gtag.js) - Google Analytics