发送给其它服务器的消息由@domain 部分区分,在进入到服务器路由后在RoutingTableImpl.routePacket(Packet packet) 中与发送给本地服务器的消息分离。
在初次发送消息给外部服务器时两台服务器的连接还没有建立,这种情况下会将包交由一个OutgoingSessionPromise 对象来处理,将消息加入它的队列。
在OutgoingSessionPromise 中保有一个线程池和一个独立线程。
独立线程不断从消息队列中读取要处理的packet,并针对每个domain建立一个PacketsProcessor线程,将消息交给这个线程,然后把此线程放入线程池中运行。
PacketsProcessor在发送消息包时会判断到外部服务器的连接是否已经建立。未建立的情况下会调用LocalOutgoingDServerSession.authenticateDomain() 方法建立连接。
具体的Socket连接建立是在authenticateDomain() 方法中经过一系列的验证和鉴权后调用createOutgoingSession(domain,hostname,port)来完成。
建立好连接后则重新调用routingTable.routePacket() 再进行一次路由。
------------------------------------------------------注意----------------------------------------------------
Openfire 中S2S 之间的链接有TLS 和 Dialback 两种加密验证方式。
如果使用TLS 方式则需要双方都有可信任的根证书,否则会出现General SSLEngine problem 异常。
Dialback则提供一种弱身份验证的方式,要使用这种方式可以将Openfire数据库中ofproperty 表中“xmpp.server.tls.enabled” 设置为false,并将“xmpp.server.dialback.enabled”设置为true。
另:Openfire 3.7.0 中的Dialback 方式有bug 会导致连接失败,已经在3.7.1中进行了修复。具体需要参照3.7.1中的代码修改LocalIncomingServerSession.java 和ServerDialback.java 两个文件。
分享到:
相关推荐
本Demo旨在展示如何使用C#的agsXMPP库连接到Openfire服务器,实现实时的登录、接收和发送消息功能。 agsXMPP是.NET平台上一个强大的XMPP库,它支持Jabber/XMPP协议,使得开发者能够快速开发出符合标准的IM应用。...
安装openfire的详细过程,手把手的教你,
2. 使用XIFF:在Flash项目中,引入XIFF库,建立与Openfire服务器的连接,并进行身份验证。XIFF提供了处理XMPP协议的接口,如登录、发送和接收消息等。 3. 编写FLA代码:在`recipient.fla`中,开发者将编写...
**Demo实现**:"openfire demo.zip"可能包含了一个简单的Android应用示例,演示了如何建立Openfire连接,发送和接收消息。这个demo会展示如何配置Openfire服务器,创建必要的XMPP连接,以及如何处理消息事件。同时,...
3. **建立P2P连接**:libjingle利用STUN和ICE服务器来发现和建立穿越NAT的P2P连接,Openfire服务器作为信令代理,转发连接请求和响应。 4. **媒体协商**:通过发送Jingle(XEP-0166)协议消息,客户端之间协商媒体...
Smack库是Java开发者与XMPP服务器通信的主要工具,它支持XMPP的核心功能,包括登录、发送和接收消息、建立和管理联系人、以及处理在线状态等。Smack库不仅易于使用,而且拥有丰富的API,可以方便地进行定制和扩展。 ...
【asmack连接Openfire测试】是针对XMPP(Extensible Messaging and Presence Protocol)协议实现的一种客户端连接示例,主要用于教初学者如何使用asmack库与Openfire服务器进行交互。Openfire是一款开源、基于XMPP...
1. **建立连接**:agsxmpp首先需要通过TCP或TLS(Transport Layer Security)与Openfire服务器建立安全连接。 2. **认证过程**:接着,agsxmpp会发送一个XML stanza(元素)进行 SASL(Simple Authentication and ...
首先,服务器会进行环境检查和配置加载,然后建立数据库连接,初始化核心服务如用户认证、路由、会话管理等。接着,Openfire会加载已安装的插件,每个插件有自己的生命周期管理,包括启动、停止、更新等阶段。最后,...
本文将深入探讨“Openfire消息回执插件”,并结合提供的三个关键文件——DbChatLogsManager.java、ChatLogPlugin.java和ChatLogs.java,解析该插件的设计与实现。 1. 消息回执机制: 消息回执是即时通讯中的一种...
然后,使用此配置建立到Openfire服务器的连接。 2. **登录Openfire**:使用XMPPTCPConnection的login方法进行用户身份验证。确保在主线程之外进行此操作,因为网络操作不应在UI线程中执行。 3. **创建聊天对象**:...
### Openfire消息处理流程与详细信息解析 #### XMPP协议概览 XMPP,全称Extensible Messaging and Presence Protocol,是一种基于XML的即时通讯协议。它不仅用于消息发送与接收,还支持状态更新和在线状态通知,即...
Openfire最主要的功能是实现XMPP服务器,Openfire的核心功能可以概括为:连接管理、消息解析、消息路由、消息发送.
然而,有时候我们可能需要在不使用XMPP协议的情况下,通过HTTP方式与Openfire客户端进行交互,例如发送消息。本篇文章将深入探讨如何实现这个功能。 首先,XMPP是一种基于XML的即时通讯协议,它被广泛应用于多人...
目前研究插件的还比较少,简单做一下学习总结。详细介绍请看我的blog:http://hi.baidu.com/jyleon/blog/item/5a6627dd7fc4dbd18d1029bf.html
这个"openfire测试demo"很可能是为了演示如何与Openfire服务器进行交互,包括建立连接、创建用户账户以及发送消息等核心功能。在本文中,我们将深入探讨这些关键知识点。 首先,让我们了解Openfire的基本架构。...
Smack简化了与XMPP服务器的通信,提供了丰富的API来处理用户认证、会话管理、消息发送和接收、以及用户状态等。 首先,确保已经正确地安装了Smack库。通常,这可以通过在项目的构建路径中添加Smack的JAR文件或者...
标签“openfire 插件 消息”明确了我们讨论的是与Openfire相关的消息记录插件。在Openfire的插件管理界面,你可以找到并安装这个插件。安装后,插件会扩展Openfire的核心功能,提供消息记录的存储和检索服务。对于...
Openfire 是一个开源的即时通讯服务器,Smack 是一个 Java 和 Android 上的 XMPP(可扩展通讯与表示协议)库,而 WebSocket 则是一种在客户端和服务器之间建立长连接的网络协议,提供了低延迟、双向通信的能力。...
在Flex中,我们可以通过AS3的Socket类或AMFChannel(与 BlazeDS 或 LCDS 集成)与Openfire建立连接。Openfire提供了XMPP协议的API,使得Flex客户端能够进行登录、发送接收消息、查看在线状态等操作。Flex的事件驱动...