`
yjl49
  • 浏览: 113361 次
社区版块
存档分类
最新评论

Openfire S2S 监听与消息处理

阅读更多

Openfire中Server to Server 连接默认使用5269 端口,在管理员后台的Server-->Server Settings --> Server to Server 页面有相应的配置项。

首先看Service Enable 项:

在用户选择了 Enabled 填写监听端口 提交后在jsp页面里调用的是ConnectionManager相应的方法:

在enableServerListener() 方法中主要调用以下两个方法:

 

相应的ip和端口信息被包装成一个SocketAcceptThread,做为一个独立的线程运行。在SocketAcceptThread 里面有一个BlockingAcceptingMode 成员,专门用来监听Socket连接。

 

 

每监听到一个连接都会交由一个线程来接管。 这个线程运行SocketReader的run()方法,接收消息,具体的消息的接收和初步处理由SocketReader里面的SocketReadingMode对象进行。

SocketReadingMode 反过来调用ServerSocketReader的createSession()方法根据namespace创建Session。

所有其它域连接到本地服务器的session都由LocalIncomingServerSession保持,session的创建也是由它来进行。(目前Openfire只支持dailback的S2S验证方式,在Openfire3.7.0中 dialback是有问题的,在3.7.1中进行了fix。 ) sessio创建时会发送相应的握手信息给对方。

初始建立的session是未验证的,此时如果对端发送iq、message、presence等消息由ServerSocketReader接收,其调用packetReceived() 方法验证域名并抛出PacketRejectedException,所以S2S开始发送的应该为验证信息。

本地ServerSocketReader收到验证信息后由processUnknowPacket() 方法处理,调用LocalIncomingServerSession 的validateSubsequentDomain() 验证。

具体的由一个ServerDialback对象进行处理(Openfire3.7.0的bug fix 中对这个类的代码进行了修改)。刚建立连接时发送了握手信息,这里的ServerDialback对象则验证对方返回的key是否正确,OK的情况下则发送成功通知。

验证通过的session会加入到LocalIncomingServerSession的已鉴权列表中,后面发送的iq、message、presence消息就不会再被拦截。

 

分享到:
评论

相关推荐

    openfire消息、监听、启动流程分析

    **消息接收与处理**: Openfire服务器内部的消息处理涉及多个类,例如`ClientConnectHandler`和`ConnectionHandler`。当客户端发送XML消息时,`messageReceived()`方法会被调用,然后通过`XMPPPacketReader`解析XML...

    openfire处理消息流程及openfire详细信息

    ### Openfire消息处理流程与详细信息解析 #### XMPP协议概览 XMPP,全称Extensible Messaging and Presence Protocol,是一种基于XML的即时通讯协议。它不仅用于消息发送与接收,还支持状态更新和在线状态通知,即...

    openfire+asmock实现android消息推送

    这个demo会展示如何配置Openfire服务器,创建必要的XMPP连接,以及如何处理消息事件。同时,它也可能会使用AsMock来编写单元测试,确保消息传递的逻辑是正确的。 **缺失的jar包**:"openfire缺少的jar包.rar"可能...

    openfire消息回执插件

    同时,它也可能负责处理消息回执的存储,将已读回执信息保存到数据库中。 3. ChatLogPlugin.java: 这是插件的核心部分,实现了Openfire的插件接口。ChatLogPlugin类可能包含初始化、启动、停止等插件生命周期方法...

    openfire即时消息处理

    【Openfire即时消息处理】是基于Extensible Messaging and Presence Protocol(XMPP)协议的服务器端实现,XMPP是一个使用XML进行消息传输的开放标准。它不仅用于即时通讯(IM),还可以处理在线状态(presence)和...

    openfire的用户接收消息计数器

    当配置正确后,运行这个程序,它会连接到Openfire服务器,监听指定用户的接收消息,并实时更新消息计数。计数器可能有多种展示方式,如日志输出、图形界面或者集成到其他管理系统中以供查看。 在实际应用中,这样的...

    用flash+xiff+openfire 实现网页端接收推送消息

    3. 编写FLA代码:在`recipient.fla`中,开发者将编写ActionScript代码,利用XIFF库实现与Openfire的连接和消息处理。这部分代码会监听服务器推送的消息,并在网页上展示。 4. HTML集成:`recip.html`是网页部分,...

    原创openfire插件(发送在线消息、离线消息)

    目前研究插件的还比较少,简单做一下学习总结。详细介绍请看我的blog:http://hi.baidu.com/jyleon/blog/item/5a6627dd7fc4dbd18d1029bf.html

    openfire发送即时消息

    安装openfire的详细过程,手把手的教你,

    openfire消息记录存储插件

    代码可能包括了处理消息记录的逻辑,如如何存储消息、何时存储、如何索引和检索记录等。对于高级用户和开发者来说,深入研究这些代码可以更好地理解插件的工作原理,并对其进行定制化。 总的来说,"openfire消息...

    Openfire消息记录插件(消息、上传、下载插件合集)

    openfire插件,本插件直接在openfire里安装即可,集成消息在线和离线的存储、查询接口,图片、表情、语音文件的上传和下载对外接口,因此,不需要修改openfire源码即可满足聊天的实用功能,对外提供3个接口,一消息...

    openfire消息接收、处理流程图.JPG

    openfire消息接收、处理流程图.JPG

    手机接受openfire推送的消息

    Openfire作为XMPP服务器,负责处理客户端的连接、认证、会话管理和消息路由。 1. **安装与配置Openfire**: - 下载并安装Openfire服务器:访问官方网站下载最新版本的Openfire,按照提示进行安装。 - 配置服务器...

    openfire消息接收、处理流程图

    这里是个人绘制出的openfire流程图的初稿,里面包括:message、presence、iq节的接收类与相应的处理方法...到最后的处理过程。图的缩略图见:http://blog.csdn.net/love254443233/article/details/7891236。 该图仅...

    agsxmpp与openfire服务器通讯

    在这个主题中,我们将深入探讨agsxmpp如何与Openfire服务器进行交互,以及agsxmpp.dll在登录和发送消息过程中可能遇到的问题及其解决方案。 一、agsxmpp与Openfire服务器通讯基础 1. **XMPP协议**:XMPP是一种基于...

    openfire处理消息流程,及openfire详细信息.docx

    总的来说,Openfire 的消息处理流程涉及用户连接、身份验证、消息的发送和接收、服务器的路由与存储,以及通过 Smack 和 Spark 进行客户端交互。Apache MINA 提供了高效的网络通信基础,而插件机制则赋予了 Openfire...

    openfire消息机制和源码分析

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

    openfire推送

    这种方式的优点是模块耦合度低,符合Openfire的设计理念,消息通过服务器中转,便于进行自定义消息处理或过滤。缺点在于开发成本相对较高。为了进一步完善推送功能,可以参考网络上相关的设计方案和资料。 在实现...

    获取MQ的值通过openfire推送消息源码【史上最强版】

    6. **性能优化**:考虑到实时推送的需求,源码可能会有性能优化的策略,比如批量处理消息、多线程处理、异步操作等。 7. **测试与部署**:为了确保代码的稳定性和可靠性,源码中可能包含单元测试和集成测试的示例,...

Global site tag (gtag.js) - Google Analytics