[实用参考]XMPP协议及其服务器端的Openfire插件开发
xmpp协议
xmpp协议XMPP协议。
XMPP(Extensible Messaging and Presence Protocol)是一种基于XML的开放式即时通讯协议,最初由Jabber开发并于2004年成为IETF标准。
XMPP协议被设计用于实时通讯,包括即时消息传递、在线状态感知、多媒体会话等功能。
它是一种面向开放网络的协议,任何人都可以使用并且可以通过扩展来满足特定的需求。
XMPP协议的核心是基于XML的消息传递,它允许在网络上发送和接收消息。
这些消息可以包含文本、图片、音频、视频等多种形式的数据。
XMPP协议还支持在线状态感知,用户可以知道其他用户的在线状态,例如在线、离线、忙碌等。
这种实时的状态感知使得用户能够更好地进行沟通和协作。
除了基本的消息传递和在线状态感知功能,XMPP协议还支持多媒体会话。
用户可以通过XMPP协议进行语音通话、视频通话甚至是文件传输。
这种多媒体会话的支持使得XMPP协议成为了一种强大的实时通讯工具。
XMPP协议的另一个重要特性是其可扩展性。
由于XMPP协议是基于XML的,因此可以通过扩展来满足特定的需求。
这意味着开发者可以根据自己的需求来扩展XMPP协议,使其支持更多的功能。
这种灵活性使得XMPP协议成为了一种非常适合开发者的通讯协议。
在实际应用中,XMPP协议被广泛应用于即时通讯软件、社交网络、物联网等领域。
许多知名的即时通讯软件,如Google Talk、Facebook Messenger等都使用了XMPP协议。
同时,XMPP协议也被应用于物联网领域,用于设备之间的通讯和数据交换。
总的来说,XMPP协议是一种功能强大、灵活性高的即时通讯协议。
它支持消息传递、在线状态感知、多媒体会话等功能,并且具有很高的可扩展性。
由于这些特性,XMPP协议被广泛应用于各种领域,成为了一种重要的通讯工具。
希望本文对于XMPP协议有一个清晰的认识,对于相关领域的开发和应用有所帮助。
网络协议知识:XMPP协议的工作原理和应用场景
网络协议知识:XMPP协议的工作原理和应用场景XMPP(Extensible Messaging and Presence Protocol,可扩展消息和存在协议)是一种基于XML的开放式即时通讯协议。
它最初被设计为一种聊天协议,但现在已被广泛用于实时通信、平台之间通讯、物联网等多个领域。
本文将为读者介绍XMPP协议的工作原理和应用场景。
一、XMPP协议的工作原理XMPP协议基于客户端/服务器架构,允许用户之间进行实时通信。
这些用户可能是个人,也可能是公司内部的员工或外部的供应商。
XMPP的设计目标是灵活、可扩展,并且易于部署和使用。
XMPP协议主要由以下三部分组成:1. Jabber XML Stream这是XMPP通信的基础,它提供了两个实体之间沟通的一种规范化方式。
Jabber协议由一系列XML元素、属性和扩展构成,这些元素用于交换信息和命令。
2. Jabber XML StanzaJabber协议使用“stanza”来描述不同类型的消息或命令。
XML stanza包括三个主要部分:头部、正文和扩展。
消息可以是文本或文件,如图片、视频和音频文件,也可以是命令,如在线状态更新和好友添加请求。
3. XMPP服务器XMPP服务器是整个协议的核心。
它负责维护用户账户信息、处理消息传输和控制通讯,还可以实现附加的功能扩展。
当两个XMPP客户端需要通信时,它们首先要连接到XMPP服务器,并进行身份验证。
一旦认证成功,客户端可以建立一个XML流,开始基于Jabber的通信。
客户端通过发送XML命令和消息给服务器,并将其发送到目标客户端。
当目标客户端收到消息后,它也会将响应发送回XMPP服务器,服务器再将消息转发给发送方客户端。
二、XMPP协议的应用场景XMPP协议已经得到了广泛的应用,以下是一些典型的应用场景。
1.即时通讯XMPP可以用于构建即时通讯系统。
它可以让用户之间实时发送文本、图像、视频和音频文件。
XMPP协议即时通讯(Openfire服务器版)
XMPP协议即时通讯(Openfire服务器版)一、什么是XMPPXMPP(Extensible Messageing and Presence Protocol:可扩展消息与存在协议)是目前主流的IM(IM:instant messaging,即时消息)协议之一。
XMPP是一种基于标准通用标记语言的子集XML的协议,它继承了在XML 环境中灵活的发展性。
XMPP中定义了三个角色,客户端,服务器,网关。
通信能够在这三者的任意两个之间双向发生。
服务器同时承担了客户端信息记录,连接管理和信息的路由功能。
网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS(短信),MSN,ICQ 等。
XMPP即时通信协议,采用C/S体系结构。
基本的网络形式是客户端连接到服务器,然后由服务器去连接到另一个客户端进行两个客户端之间的通信。
而他们传输的是XML流。
XMPP工作原理说明: 所有从一个客户端到另一个客户端的消息和数据都要通过服务器。
1、客户端连接服务器2、服务器利用本地目录系统的证书对其认证3、客户端制定目标地址,让服务器告知目标状态4、服务器查找,连接并进行相互认证5、客户端间进行交互二、搭建服务器(Openfire)通过上述的了解,我们知道要想进行通信,我们必须要有一个服务器。
服务器端采用Openfire作为服务器。
允许多个客户端同时登录并且并发的连接到一个服务器上。
服务器对每个客户端的连接进行认证,对认证通过的客户端创建会话,客户端与服务器端之间的通信就在该会话的上下文中进行。
首先安装Openfire点击继续点击安装安装成功后再偏好设置中就会有Openfire的图标。
点击Openfire的图标如果第一次安装Openfire,会发现Openfire的状态是停止的。
点击StartOpenfire,开启Openfire服务器注:如果Openfire一直打不开,请参考:/winer888/article/details/49886281当Status成为Running。
Xmpp与Openfire介绍
XMPP介绍可扩展的消息和出席信息协议(XMPP)是一个XML应用,让任何两个或多个网络实体之间进行结构化和可扩展的准实时信息交流. 本文定义了XMPP的核心协议方法: XML流的配置和解除, 通道加密, 验证, 错误处理, 以及消息通讯基础, 网络可用性("presence"), 和请求-应答交互。
XMPP的目标是允许两个(或多个)实体通过网络来交换相关的小件结构化数据(所谓"XML节"). XMPP典型地使用分布式的客户端-服务器体系结构来实现, 这里客户端需要连接到一个服务器以获得对网络的访问,从而被允许和其他实体(可能在其他服务器上)交换XML节. 一个客户端连接到一个服务器,交换XML节,以及结束连接,这样的流程如下:1. 确定要连接的IP地址和端口号, 典型的做法是对一个合格的域名做出解析2. 打开一个传输控制协议TCP连接3. 通过TCP打开一个XML流4. 握手最好使用传输层安全性TLS来进行通道加密5. 使用简单验证和安全层SASL机制来验证6. 绑定一个资源到这个流上7. 和其他网络上的实体交换不限数量的XML节8. 关闭XML流9. 关闭TCP连接在XMPP中, 一个服务器可以选择性地连接到另一个服务器以激活域间或服务器间的通讯. 这种情形下, 两个服务器需要在他们自身之间建立一个连接然后交换XML节; 这个过程所做的事情如下:1. 确定要连接的IP地址和端口号, 典型的做法是对一个合格的域名做出解析2. 打开一个TCP连接3. 打开一个XML流4. 握手最好使用TLS来进行通道加密5. 使用简单验证和安全层SASL机制来验证6. 交换不限数量的XML节,可以服务器之间直接交换,也可以代表每台服务器上的相关实体来交换,例如那些连到服务器上的客户端7. 关闭XML流8. 关闭TCP连接XMPP协议组成主要的XMPP 协议范本及当今应用很广的XMPP 扩展:RFC 3920 XMPP(RFC6120 新):核心。
XMPP开源服务器Openfire的安装和配置指南
XMPP开源服务器Openfire的安装和配置指南Openfire 的安装和配置1、下载最新的openfire安装文件官方下载站点:下载地址:Exe:ZIP:我使用的是zip解压版的安装文件。
其中openfire是服务器,下面还有一个spark,这个是一个XMPP协议通信聊天的CS的IM软件,它可以通过openfire进行聊天对话。
2、下载完成后,如果你下载的是exe文件,执行你的安装文件,进行安装。
这里我是zip的文件。
解压后,复制openfire目录到C:\Program Files\目录下;一定要在C:\Program Files\目录下的;这样openfire就安装完成了。
3、下面我们启动openfire服务器,并配置它。
在C:\Program Files\openfire\bin目录下有一个电灯泡的openfire.exe文件,双击执行,启动完成后可以看到4、点击Launch Admin按钮进入页面,配置openfire服务器5、选择语言中文简体点击continue进入6、配置服务器域名如果你是本地访问,那么你可以不修改或是使用localhost、127.0.0.1的方式如果你用于外网或局域网访问,那么你的地址配置成外网或局域网地址7、选择数据库选择openfire自带的,当然你也可以选择你的数据库类型。
如Oracle、SQLServer、MySQL等。
如果openfire没有带jdbc的连接驱动,你需要添加连接数据库的jdbc驱动;驱动放在C:\Program Files\openfire\lib目录下8、选择特性配置,默认即可9、管理员邮件,可以跳过这步10、安装完成进入管理员控制台页面11、进入页面后,输入admin、密码admin登陆进入12、进入后可以看到服务器名称就是jwchat的连接地址;你可以使用Spark、jwchat 链接这个地址进行IM通信聊天……至此,openfire的安装和配置已经完成。
openfire插件开发
作用:初始化时在控制台打印测试消息。
开发环境:winxp/myeclipse6.5/jdk1.5&1.6/mysql5.0/openfire3.6.3 QQ群:28588322 (openfire专题研究小组)开发步骤:1. 布署openfire3.6.3源码(请参考openfire3.6.3导入eclipse项目实现方法) 结构如下:2. src/plugins目录下新建文件夹itvi。
并按下图的目录结构新建对应的文件。
plugin.xml文件代码如下:<?xml version="1.0" encoding="UTF-8"?><plugin><class>org.jivesoftware.openfire.plugin.Itvi</class><name>Itvi</name><description>Broadcasts messages to users.</description> <author>openfireteam</author><version>1.7.0</version><date>2/19/2009</date><url></url><minServerVersion>3.6.3</minServerVersion></plugin>Itvi.java文件代码如下:package org.jivesoftware.openfire.plugin;import org.dom4j.Element;import org.jivesoftware.openfire.IQHandlerInfo;import org.xmpp.packet.*;import org.jivesoftware.openfire.handler.IQHandler;import org.jivesoftware.openfire.auth.UnauthorizedException;/*** 处理客户端发来的IQ,并回送结果IQ** @author Phoenix** Mar 14, 2008 4:55:33 PM** version 0.1*/import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.QName;import org.jivesoftware.openfire.XMPPServer;import org.jivesoftware.openfire.container.Plugin;import org.jivesoftware.openfire.container.PluginManager; import org.jivesoftware.openfire.disco.IQDiscoInfoHandler; import org.jivesoftware.openfire.disco.IQDiscoItemsHandler; import org.jivesoftware.openfire.forms.DataForm;import org.jivesoftware.openfire.forms.FormField;import org.jivesoftware.openfire.forms.spi.XDataFormImpl; import org.jivesoftware.openfire.forms.spi.XFormFieldImpl; import org.jivesoftware.openfire.resultsetmanager.ResultSet; import org.jivesoftware.openfire.resultsetmanager.ResultSetImpl; import er;import erManager;import erNotFoundException; import org.jivesoftware.util.*;import ponent;import ponentException;import ponentManager;import ponentManagerFactory;import org.xmpp.packet.IQ;import org.xmpp.packet.IQ.Type;import org.xmpp.packet.JID;import org.xmpp.packet.Packet;import org.xmpp.packet.PacketError;import org.xmpp.packet.PacketError.Condition;import java.io.File;import java.util.*;import java.util.Map.Entry;public class Itvi implements Plugin{private XMPPServer server;/** (non-Javadoc)** @see org.jivesoftware.openfire.container.Plugin#destroyPlugin()*/public void destroyPlugin(){}/** (non-Javadoc)** @seeorg.jivesoftware.openfire.container.Plugin#initializePlugin(org.jivesoftware.openfir e.container.PluginManager,* java.io.File)*/public void initializePlugin(PluginManager manager, File pluginDirectory){server = XMPPServer.getInstance();server.getIQRouter().addHandler(new ItviIQHander()); //System.out.println("测试插件启动成功");}}ItviIQHander.java文件代码如下:package org.jivesoftware.openfire.plugin;import org.dom4j.Element;import org.jivesoftware.openfire.IQHandlerInfo;import org.xmpp.packet.*;import org.jivesoftware.openfire.handler.IQHandler;import org.jivesoftware.openfire.auth.UnauthorizedException;/*** 处理客户端发来的IQ,并回送结果IQ** @author Phoenix** Mar 14, 2008 4:55:33 PM** version 0.1*/public class ItviIQHander extends IQHandler{private static final String MODULE_NAME = "group tree handler";private static final String NAME_SPACE = "com:im:group";private IQHandlerInfo info;public ItviIQHander(){super(MODULE_NAME);//info = new IQHandlerInfo("gruops", NAME_SPACE);info = new IQHandlerInfo("query", "jabber:iq:roster");//这里我们对”联系人”的IQ进入监控}/** (non-Javadoc)** @see org.jivesoftware.openfire.handler.IQHandler#getInfo()*/@Overridepublic IQHandlerInfo getInfo(){return info;}/** (non-Javadoc)** @seeorg.jivesoftware.openfire.handler.IQHandler#handleIQ(org.xmpp.packet.IQ) */@Overridepublic IQ handleIQ(IQ packet) throws UnauthorizedException{IQ reply = IQ.createResultIQ(packet);Element groups = packet.getChildElement();//1if (true){System.out.println("非法的请求类型111111");}if (!IQ.Type.get.equals(packet.getType())){System.out.println("非法的请求类型");reply.setChildElement(groups.createCopy());System.out.println("返回的最终XML-SetError前"+reply.toXML());reply.setError(PacketError.Condition.bad_request);System.out.println("返回的最终XML-SetError后"+reply.toXML());return reply;}//String userName =StringUtils.substringBefore(packet.getFrom().toString(),"@");//GroupManager.getInstance().initElement(groups,userName); //reply.setChildElement(groups.createCopy());//2//System.out.println("返回的最终XML" reply.toXML());return reply;}}3.打包插件a.第一次打包需配置ant工具。
[实用参考]XMPP协议及其服务器端的Openfire插件开发
GMPP协议及其服务器端的Openfire插件开发GMPP背景知识GMPP是一种基于GML的协议,它继承了在GML环境中灵活的发展性。
因此,基于GMPP的应用具有超强的可扩展性。
绊过扩展以后的GMPP可以通过发送扩展的信息来处理用户的需求,以及在GMPP的顶端建立如内容发布系统和基于地址的服务等应用程序。
而且,GMPP包含了针对服务器端的软件协议,使乊能不另一个进行通话,这使得开发者更容易建立客户应用程序戒给一个配好系统添加功能。
GMPP(可扩展消息处理现场协议)是基于可扩展标记语言(GML)的协议,它用于即时消息(IM)以及在线现场探测。
它在促进服务器乊间的准即时操作。
这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息,即使其操作系统和浏览器丌同。
GMPP的前身是Jabber,一个开源形式组织产生的网络即时通信协议。
GMPP目前被IETF国际标准组织完成了标准化工作。
标准化的核心绌果分为两部分;核心的GML流传输协议基于GMLFreeEIM流传输的即时通讯扩展应用GMPP的核心GML流传输协议的定义使得GMPP能够在一个比以往网络通信协议更规范的平台上。
借劣于GML 易于解析和阅读的特性,使得GMPP的协议能够非常漂亮。
GMPP的即时通讯扩展应用部分是根据IETF在这乊前对即时通讯的一个抽象定义的,不其他业已得到广泛使用的即时通讯协议,诸如AIM,QQ等有功能完整,完善等先进性。
GMPP的扩展协议Jingle使得其支持语音和视频。
基本网络结构GMPP中定义了三个角色,客户端,服务器,网关。
通信能够在这三者的任意两个之间双向发生。
服务器同时承担了客户端信息记录,连接管理和信息的路由功能。
网关承担着不异构即时通信系统的互联互通,异构系统可以包括SMS (短信),MSN,ICQ等。
基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在乊上传输GML。
功能传输的是不即时通讯相关的指令。
openfire 原理
openfire 原理Openfire是一个基于XMPP协议的实时通信服务器,它的原理是通过客户端与服务器之间的交互,实现用户之间的即时通信。
下面将详细介绍Openfire的工作原理。
1. Openfire的通信模型Openfire采用的是C/S架构,即客户端-服务器模型。
客户端负责与用户进行交互,发送和接收消息,而服务器则负责维护用户信息、路由消息以及保证消息的可靠传输。
2. 用户注册与登录用户在Openfire上注册账号时,需要提供用户名和密码等信息,服务器会将这些信息保存在数据库中。
当用户登录时,客户端向服务器发送登录请求,服务器验证用户的身份信息,如果验证通过,则可以进行后续的通信操作。
3. 路由消息Openfire服务器通过路由消息来实现用户之间的消息传递。
当一个用户发送消息时,消息首先会被客户端发送到服务器,服务器根据目标用户的JID(Jabber Identifier)将消息路由到相应的客户端。
4. Presence机制Presence机制是Openfire中重要的一部分,它用于表示用户的在线状态。
当用户登录时,客户端会发送一个presence包给服务器,服务器会将用户的在线状态信息存储起来,并通知其他用户。
其他用户可以根据这些信息来判断用户的在线状态,从而进行相应的操作。
5. 群组聊天Openfire支持群组聊天功能,用户可以创建群组并邀请其他用户加入。
当用户发送消息到群组时,服务器会将消息路由到所有群组成员的客户端。
6. 插件扩展Openfire提供了插件扩展的机制,可以通过插件来增加额外的功能。
例如,可以通过插件实现文件传输、语音通话等功能,从而满足不同用户的需求。
7. 安全性Openfire支持加密通信,可以通过SSL/TLS协议对通信进行加密,保证数据的安全性。
此外,Openfire还提供了用户认证机制,可以通过用户名和密码、LDAP等方式对用户进行身份验证。
总结:Openfire是一款功能强大的实时通信服务器,它通过客户端与服务器之间的交互,实现用户之间的即时通信。
openfire开发文档
Openfire开发文档修订记录目录1OPENFIRE项目工程搭建及调试 (1)1.1准备工作 (1)1.2解压源码 (1)1.3创建工程 (2)1.4编译 (3)1.5配置调试与运行环境 (5)1.6打包发布 (10)2OPENFIRE代码框架介绍 (10)2.1框架 (11)2.1.1Module (11)2.1.2数据流 (13)2.2O PENFIRE与MIMA (13)2.3M ULTI-U SER-C HAT (14)2.3.1MUCUser (14)2.3.2MUCRole (15)2.3.3MUCRoom (15)2.3.4MultiUserChatServiceImpl (15)2.3.5时序图 (16)2.4P UB-S UB (16)2.4.1Node (16)2.4.2NodeAffiliate (17)2.4.3NodeSubscription (17)2.4.4PubSubModule (17)2.4.5PubSubEngine (18)2.4.6时序图 (18)2.5插件开发 (19)2.5.1注册为组件 (19)2.5.2注册为拦截器 (19)2.5.3注册为IQHandler (20)2.6命名规则 (21)2.6.1XXStarter (21)2.6.2XXListener (21)2.6.3XXDispatcher (21)2.6.4XXPlugin (21)2.6.5XXProvider (21)2.6.6XXHandler (22)2.7系统配置项 (22)2.8系统启动流程 (23)2.9网络处理 (23)2.9.1presence(出席状态)消息处理流程 (23)2.9.2消息监听服务 (25)2.9.3消息封装 (26)2.9.4Openfire消息包接受处理流程 (27)2.10数据库处理 (28)2.10.1Openfire连接数据库修改 (28)2.10.2ConnectionProvider (28)2.10.3处理方式 (28)2.10.4常用类 (28)3OPENFIRE插件开发流程 (29)3.1O PENFIRE P LUGINS加载流程 (29)3.2开发说明 (29)3.2.1总体插件目录结构 (30)3.2.2编写Plugin.xml (30)3.2.3继承Plugin接口 (33)3.2.4插件开发的最优方法 (34)3.2.5JSP页面配置步骤 (34)3.2.6i18n国际化配置 (37)3.2.7Ant build 插件 (38)4OPENFIRE 的CACHE机制 (39)4.1实现机制 (39)1Openfire项目工程搭建及调试Openfire的最新源码3.7.1下源码的运行及打包1.1 准备工作开发工具:Eclipse源码下载:官网地址/downloads/source.jsp,当前最新版本为3.7.1。
Openfire即时通讯服务搭建与Smack访问
Openfire即时通讯服务搭建与Smack访问Openfire是开源的、基于可拓展通讯和表示协议(XMPP)、采用Java编程语言开发的实时协作服务器。
Ope nfire安装和使用都非常简单,并利用Web进行管理单台服务器可支持上万并发用户。
首先到openfire官网上去下载Openfire的服务器包与Smack的客户端调用包。
6Openfire 1%**)勵州r| ■t*3!- A*.Spark 2 e.2L ・・鼻l-e c<乍M/EWe严*rwr E»h Vw ntfFV Smack 419E AITI1 191 «tw 4>*3i JCMM1 eiitnflEi^ririjL*"*!!津阿*打开肓在这里可U看對有0penfire > S(jarK> Smack这三个东函”敦简单释一下它们分別皐什么* Openfire^r 跑在服莓黠的・和刑与Sm耳*星跑在客户如上的』而Spar+ lS 经构逹好的应用程序•下玄下来安装即可德用(看下面的戡圉)t Smaci^K供访问Openfire^^用授口.就县曲开潢塔代码的啦.Openfire下载后,如果是win的版本,那么它是一个exe的安装包,运行下一步下一步即可,其间会需要配置数据库(Openfire当然是需要数据库支持的了,比如要存帐号等等的信息)。
Openfi译安算感功后・TaSmacWft i劭也含言相应播口的larfi,导入列我们的工程更(不同版本的smzckj印可龍会不主一祥)h S WKkjtrb R wnKld-|*r卜二tmtdai编写我们的程序访问Operfire[java] view pla in copyimport java.util.Collectio n;import java.util.I terator;import javax .n et.SocketFactory;import org.jivesoftware.smack.Acco un tMa nager; import org.jivesoftware.smack.Chat; import org.jivesoftware.smack.ChatMa nager;import org.jivesoftware.smack.ChatMa nagerListe ner; import org.jivesoftware.smack.C onn ectio n;import org.jivesoftware.smack.C onn ectio nCon figurati on; importorg.jivesoftware.smack.MessageListe ner; import org.jivesoftware.smack.Roster;import org.jivesoftware.smack.RosterE ntry;import org.jivesoftware.smack.XMPPC onn ectio n; importorg.jivesoftware.smack.XMPPExceptio n; import org.jivesoftware.smack.packet.Message; import org.jivesoftware.smack.packet.Prese nee; importorg.jivesoftware.smack.packet.Sessi on; importorg.jivesoftware.smack.packet.Message.Type;public class SmackUtil {private Connection conn ecti on;private ConnectionCon figurati on con fig; /** ope nfire 服务器address */private final static Stri ng server = "10.100.53.65";private final void print(Object o) {if (o != n ull) {System.out.pri ntl n( o);}}。
openfire汇报
Xmpp协议实现
客户端实现
名称 Spark 跨平台 平台 java 说明
Google Talk
网易泡泡 iChat
Windows、android
Windows Mac OS X v10.4及以 上
仅支持gmail托管下 账号登陆
仅支持网易托管下账 号登陆 Telepathy-基底
所有这些实现 中, spark+openfire 的组合因其开 源等特性得到 非常广泛的应 用
基于总线的设计方式。各个Module都是单例,使用者通过总线获得Module相 关实例。所有的Module大致分为以下几类: 提供服务功能; 提供处理功能; 提供配置功能; 提供监听功能; 提供网络功能。
Openfire服务端安装部署
1.Openfire提供了Windows、Linux、Mac三大平台下的安装程序,安装过程完全傻瓜化,既可以使用 其内嵌数据库,也可使用自建数据库。
Xmpp协议通信模式
DNS Server XMPP Client XMPP Client
XMPP Server Xml流
XMPP Server
XMPP Client
Protocol Gateway
XMPP Client
Other Server
XMPP核心协议通信的基本模式就是先建立一个XML流,然后进行协商(协商的主要 目的是为了保证通信的安全性),协商完毕之后客户端发送许多XML节。服务器根 据客户端发送的信息以及程序的逻辑,发送XML节给客户端。但此过程并不是一问 一答的,任何时候都有可能从一方发信给另外一方。通信的最后阶段是通过 </stream>标记关闭XML流,关闭TCP/IP连接。
xmpp协议书
xmpp协议书XMPP(全称为Extensible Messaging and Presence Protocol,可拓展消息与状态协议)是一种基于XML的协议,用于实时的、即时的网络通信。
它最初设计用于即时消息的传输和状态的更新,但随着时间的推移,它已经被拓展用于其他功能,如VoIP(Voice over IP,即网络电话)和视频聊天。
最早的XMPP协议标准由Jabber软件开发者社区于1999年创立。
该协议使用基于XML的语法定义了一组规则和格式,用于在不同实体之间传输消息和状态。
XMPP是一种开放协议,其规范和相关技术文档可供任何人查看和实现。
此外,XMPP协议的拓展性使得它可以适应不同的应用场景和需求。
XMPP协议的核心功能是实现即时消息传递和状态更新。
它允许用户在不同设备和平台上发送和接收实时消息。
XMPP定义了客户端和服务器之间的通信流程和机制,包括建立连接、身份验证、消息传输和状态更新。
通过XMPP,用户可以发送文本消息、文件、图片和音频等内容,与其他用户进行实时交流。
除了即时消息,XMPP还支持状态更新功能。
这意味着用户可以在其好友列表中显示其在线状态、离线状态、忙碌状态等。
这种状态可以通过XMPP协议及时更新,并在好友列表中显示。
这种功能使得用户可以实时了解好友的状态,从而更好地选择交流时间和方式。
另外,XMPP还支持拓展功能,使得它可以适应不同的应用需求。
通过定义扩展协议,XMPP可以支持诸如语音通话、视频聊天和文件传输等功能。
这些扩展协议可以根据特定的应用场景开发和实现,从而使得XMPP在不同领域中发挥更大的作用。
XMPP协议的优势之一是其开放性和互操作性。
由于XMPP 的规范和技术文档对公众开放,任何人都可以使用标准的XMPP库和工具构建自己的XMPP应用。
这使得XMPP成为一个开放的通信协议,可以在不同的平台和设备上使用,与其他XMPP应用进行交流。
此外,XMPP的安全性也是其优势之一。
xmpp 协议
xmpp 协议XMPP 协议。
XMPP(Extensible Messaging and Presence Protocol)是一种基于XML的开放式即时通讯协议,最初由Jabber开发,并于2004年成为IETF的正式标准。
XMPP协议被广泛应用于即时通讯、社交网络、物联网和云计算等领域,其开放、可扩展、安全的特性使得它成为了许多应用程序的首选通讯协议。
XMPP协议的核心是消息和状态的传输,它允许用户在网络上实时地交换消息,并且能够感知到其他用户的在线状态。
这种即时通讯的特性使得XMPP协议成为了许多即时通讯应用程序的基础,比如Google Talk和Facebook Messenger等。
除了即时通讯,XMPP协议还可以用于传输其他形式的数据,比如文件传输、语音视频通话和远程协作等。
这些功能的实现离不开XMPP协议的灵活性和可扩展性,开发者可以根据自己的需求定制和扩展XMPP协议,使得它更加适用于特定的应用场景。
XMPP协议的安全性也是其受欢迎的原因之一。
它支持TLS加密和SASL认证等安全机制,可以保障通讯数据的机密性和完整性。
同时,XMPP协议还支持端到端的加密,保护用户的隐私和数据安全。
除了基本的消息传输和状态管理,XMPP协议还支持许多扩展功能,比如订阅和发布、数据推送和事件通知等。
这些功能使得XMPP协议不仅适用于即时通讯,还可以应用于物联网和云计算等领域,为开发者提供了更多的选择和可能性。
总的来说,XMPP协议是一种强大而灵活的通讯协议,它不仅适用于即时通讯,还可以应用于许多其他领域。
其开放、可扩展、安全的特性使得它成为了许多应用程序的首选通讯协议。
随着互联网的不断发展,XMPP协议将继续发挥重要作用,为用户和开发者带来更好的通讯体验和更多的创新可能性。
XMPP协议使用开源jabber(XMPP)协议及openfire架设内部即时通讯服务
XMPP协议使用开源jabber(XMPP)协议及openfire架设内部即时通讯服务分类:C# jabber/XMPP 2010-12-11 14:59 89人阅读评论(0) 收藏举报Jabber 是著名的即时通讯服务服务器,它是一个自由开源软件,能让用户自己架即时通讯服务器,可以在Internet上应用,也可以在局域网中应用。
XMPP(可扩展消息处理现场协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现场探测。
它在促进服务器之间的准即时操作。
这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息,即使其操作系统和浏览器不同。
XMPP的技术来自于Jabber,其实它是 Jabber 的核心协定,所以XMPP有时被误称为Jabber协议。
Jabber是一个基于XMPP协议的IM应用,除Jabber 之外,XMPP还支持很多应用。
下面就是如何架设内部即时通讯服务的步骤:第一步:安装Jabber服务器软件Jabber服务软件有很多,具体可以参考jabber官方网站的列表:Jabber官网地址:/常用Jabber服务器软件:/software/servers.shtml其中最为方便安装搭建的无疑是Openfire(Wildfire),一款基于GPL协议开源软件,Openfire有linux、windows和MAC的不同版本,软件需要java环境支持,不过软件本身自带了环境包,你可以根据你的需要下载不同的版本。
下载地址:/downloads/index.jsp#openfire最新版本:Openfire 3.3.21、Windows版本安装方法:下载:openfire_3_3_2.exe带java环境版本安装:直接运行安装文件,程序默认安装至c:/Program Files/Openfire运行:/bin/openfire.exe2、Linux/Unix版本安装方法如果使用rpm包安装,下载:openfire-3.3.2-1.i386.rpm运行:#rpm -ivh openfire_3_0_0.rpm默认安装路径位于:/opt/openfire使用源码包安装,下载:openfire_3_0_0.tar.gz(不带java环境,请自行安装)#tar -xzvf openfire_3_0_0.tar.gz# mv openfire /opt启动方法:#/opt/openfire/bin/openfire.sh第二步:配置jabber服务器Openfire(Wildfire)支持完全的web安装,如果你在本地按安装只需要在浏览器中输入http://localhost:9090(远程服务器为http://你的服务器地址:9090)即可开始即时通讯服务器配置。
Openfire源码分析—图文兼备
Openfire源码分析1. OpenfireOpenfire是开源的实时协作服务器(R TC),它是基于公开协议XMPP(也成为Jabber)消息的。
Openfire的核心功能可以概括为:连接管理、消息解析、消息路由、消息发送。
1.1 框架Openfire核心功能由Module组成,上图中的各个模块绝大多数也是基于Module实现的。
为了动态的管理这些Module,Openfire使用了自己的类加载器JiveClassLoader,这样就可以在不重新启动系统的前提下进行Module的安装、卸载和重新加载。
1.2 ModuleOpenfire在启动时就加载了所有的Module,这些Module提供了Openfire的核心功能。
所有Module都需要实现Module接口,该接口中定义了模块生命周期中需要调用的方法,如下图所示:1.3 数据流2. Openfire与MIMAMINA是Apache组织下的一个项目,它可以帮助用户轻松的开发高性能和高扩展性的网络应用。
MINA提供了一个抽象的、支持各种传输协议的(如TCP/IP、UDP/IP)、基于Java NIO的异步事件驱动的API。
Openfire的ConnectionHandler类继承了MINA的IoHandlerAdaper,他主要负责连接的创建、销毁,以及接收到XML数据包的投递。
ConnectionHandler有三个子类,其中ClientConnectionHandler负责客户端与服务器端的连接,Com ponentConnectionHandler负责组件与服务器端的连接。
3. Multi-User-Chat多人聊天的消息是绑定在子域conference上的,对应的Com ponent是MultiUserChatServiceIm pl。
在多人聊天中,涉及到的实体与关系有:用户、聊天室、用户与聊天室的关系,MultiUserChatServiceIm pl就负责这些实体与关系的维护以及消息的投递。
基于openfire和xmpp协议的Webim客户端设计与实现
基于openfire和xmpp协议的Webim客户端设计与实现左海春【期刊名称】《电脑知识与技术》【年(卷),期】2014(000)009【摘要】WebIM,是基于HTTP协议,系统采用B/S结构进行开发,客户端以网页的形式实现与openfire服务器及其它客户端的及时通信。
这种B/S结构的系统功能在服务器端统一管理与维护,既降低了维护难度,也使系统部署费用得到减少。
因此,Web IM技术将在基于即时通信及Web的远程监控、网站客服等方面有重大的意义。
为解决现有WebIM系统客户端“拉”(Client_pull)模式周期请求而产生的系统消息延迟,以及客户端和服务器端通信量大的问题,提出了利用服务器“推”(Server-push)模式技术作为基础的WebIM系统,并选择openfire开源服务器及支持XMPP作为服务器和客户端的通信协议。
并给出了实现HTTP长连接的策略。
并开发实现了WebIM系统,采用服务器推送方式使用户在体验方面得到改进, Web用户将不会感觉到消息的延迟。
%WebIM, is based on the HTTP protocol, the system is based on B/S structure, the client in the form of Webpage achieve timely communication with the openfire server and client. The function of this system in B/S structure server unified management and maintenance, not only reduce the maintenance difficulty, also makes the system deployment costs be reduced. Therefore, the Web IM technology will have great significance in the instant communication and remote control of Web based on Web service, etc.. To solve the problems of the existing WebIM system client"pull"(Client_pull) systemmessage mode cycle request delay generated, as well as the client and server communication amount is large, the server"push"(Server-push) WebIM system mode technology as foundation, and select the openfire open source server and XMPP as the communication protocol and server the client. And gives the realization of HTTP long connection strategy. And the development of the WebIM system, uses the server push mode user experience is improved, Web users will not feel the message delay.【总页数】6页(P1971-1975,1982)【作者】左海春【作者单位】广州南洋理工职业学院,广东广州510925【正文语种】中文【中图分类】TP311【相关文献】1.基于MINA开发高性能网络应用程序——以实现XMPP协议Openfire3.3.3为例 [J], 剧忻;苗放2.基于XMPP协议的Jabber及Web客户端应用实践 [J], 张震;刘勃3.基于XMPP协议和Openfire的即时通信系统的开发 [J], 潘凤;王华军;苗放;李刚4.基于XMPP协议的IM软件客户端的开发 [J], 马松明5.基于XMPP协议的即时通信系统客户端的设计与研究 [J], 于承立因版权原因,仅展示原文概要,查看原文内容请购买。
OpenFire 插件开发基础教程
O p e n F i r e插件开发基础教程(总3页)-CAL-FENGHAI.-(YICAI)-Company One1-CAL-本页仅作为文档封面,使用请直接删除OpenFire 插件开发基础教程Openfire是一款优秀的XMPP服务器,而且是开放源码的.大家可以根据自己的需求进行二次开发。
二次开发主要有两种方式:1.修改源代码,2开发openfire插件。
从可扩展性上考虑,自然是开发插件是上策,只有插件无法实现时候才会选择修改源代码。
下面就个人经验,说明一下如何开发openfire插件一、环境基础要有一个配置好的openfire开发环境,这个网络上有比较详细的教程了。
比如《源代码导入eclipse中开发配置指南》和《源码部署及运行》,这时候ant应该是可以正常运行的,先执行openfire 【default】,就生成了openfire的目标代码,再执行plugins,就个生成所以系统自带的插件。
二、目录拷贝打开workspace\openfire_src\src\plugins目录,找一个要修改的插件,我选的是subscription,拷贝生成“subscriptionUF”。
打开src目录,里面有两个文件夹,java就是我们要改的源码,而web里面是修改这个插件所要用的web配置页面,目前用不到,直接删除。
三、修改这个一个xml文件,里面的内容就按照自己的样子更改吧。
最关键是确定<class>,插件所在的类名,既然没有web文件夹了adminconsole也全部注释掉吧.四、修改类和类目录修改src/java里面的目录层次,Class和src/java中的路径必须一致。
五、引入openfire项目右击openfire项目,选择New->Source Folder,在Floder name中选择到刚刚新增的插件目录,注意要选到src/java这一层六、修改类文件SubscriptionPluginUF是完全copy SubscriptionPlugin的,因此有两个类名不符的error修改一下.至此,整个openfire已经把我们新加的SubscriptionPluginUF包含在他的plugins中了,通过控制台也能看到一个仿冒的SubscriptionPluginUF插件七、单独编译插件如果每次都运行plugins,生成所有插件的同时生成我们修改的插件,固然可行,就是慢了一点,插件有什么错误也要找半天。
Openfire集群部署不完全手册
Openfire集群部署不完全手册在csdn和javaeye阅读了无数的技术博客,每一篇都让本人受益匪浅,当然时间久了,很多也都忘了,呵呵。
于是从现在开始自己也尝试着写技术博客,把自己工作与生活遇到的点滴分享给大家,也希望大家阅读了我的博客也能有点滴的收获,那都是对本人最大的鼓励,哈哈!第一次写技术博客,其实不知从何入手,果然如我所想,想把一件技术事件表述清楚是一件很困难的事情。
作为典型的码奴,性格孤僻、不善言辞、老实吧唧一直是我们的通病,但其实很多码奴都怀抱着Coding Changes the World的梦想;可惜在天朝,很多人包括本人,暂时也只能把Coding做为一种纯生存技能,也俗称“搬砖”….好像跑题了……扯淡的话先不多说,现在正式开始了,哈哈!相信很多具有即时通讯功能的项目在架构时,都会了解到Openfire,当然很多有米的公司是直接使用一些服务商提供的即时通讯系统,如环信等。
简简单单来了解下Openfire,Openfire就是实现了XMPP通讯协议的开源即时通讯系统,基于java实现,部署简单,稳定高效,社区活跃,集群方案较成熟、基于插件的扩展性也是相当令人称赞,项目的维护者是相当得负责任,现在也是不断地更新版本中。
咋一说,赶紧去Openfire的官网瞄一眼,版本已经更新到4.0.1了!天啊噜,版本帝,您可别太快啊,公司的项目跟不上您的升级步伐啊….好吧,我们还在用着旧版本…现在开始我们的正题吧,一起来实现Openfire的集群部署。
Openfire集群部署方案使用Openfire的集群插件Hazelcast Clustering Plugin完成openfire的集群部署;并使用Nginx作为整个openfire集群的负责均衡服务器。
集群部署服务器信息我们这次部署的服务器信息如下,这几台服务器都是在同一个局域网下。
当然我没这么多物理机器了,CentOS6.5的服务器都是我安装的虚拟机,你懂得…我们将把两台Openfire的服务器做一个集群;当前还部署了一台前端的负载均衡服务器。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
PMPP协议及其服务器端的Openfire插件开发PMPP背景知识PMPP是一种基于PML的协议,它继承了在PML环境中灵活的发展性。
因此,基于PMPP 的应用具有超强的可扩展性。
绊过扩展以后的PMPP可以通过发送扩展的信息来处理用户的需求,以及在PMPP的顶端建立如内容发布系统和基于地址的服务等应用程序。
而且,PMPP 包含了针对服务器端的软件协议,使乊能不另一个进行通话,这使得开发者更容易建立客户应用程序戒给一个配好系统添加功能。
PMPP(可扩展消息处理现场协议)是基于可扩展标记语言(PML)的协议,它用于即时消息(IM)以及在线现场探测。
它在促进服务器乊间的准即时操作。
这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息,即使其操作系统和浏览器丌同。
PMPP的前身是Jabber,一个开源形式组织产生的网络即时通信协议。
PMPP目前被IETF国际标准组织完成了标准化工作。
标准化的核心绌果分为两部分;核心的PML流传输协议基于PMLFreeEIM流传输的即时通讯扩展应用PMPP的核心PML流传输协议的定义使得PMPP能够在一个比以往网络通信协议更规范的平台上。
借劣于PML 易于解析和阅读的特性,使得PMPP的协议能够非常漂亮。
PMPP的即时通讯扩展应用部分是根据IETF在这乊前对即时通讯的一个抽象定义的,不其他业已得到广泛使用的即时通讯协议,诸如AIM,QQ等有功能完整,完善等先进性。
PMPP的扩展协议Jingle使得其支持语音和视频。
基本网络结构PMPP中定义了三个角色,客户端,服务器,网关。
通信能够在这三者的任意两个之间双向发生。
服务器同时承担了客户端信息记录,连接管理和信息的路由功能。
网关承担着不异构即时通信系统的互联互通,异构系统可以包括SMS(短信),MSN,ICQ等。
基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在乊上传输PML。
功能传输的是不即时通讯相关的指令。
在以前这些命令要么用2进制的形式发送(比如QQ),要么用纯文本指令加空格加参数加换行苻的方式发送(比如MSN)。
而PMPP传输的即时通讯指令的逻辑不以往相仿,只是协议的形式变成了PML格式的纯文本。
这丌但使得解析容易了,人也容易阅读了,方便了开发和查错。
而PMPP的核心部分就是一个在网络上分片断发送PML的流协议。
这个流协议是PMPP的即时通讯指令的传递基础,也是一个非常重要的可以被进一步利用的网络基础协议。
所以可以说,PMPP用TCP传的是PML流。
PMPP(EPtensibleMessagingandPresenceProtocol,可扩展的消息和出席协议)是一种基于PML的传递消息路由和出席信息(Presence)的协议,它为不同的网络之间互联提供了一种安全而简单的编程语言,是Jabber系统(一种开放源代码的即时通信IM系统,Openfire系统的前称)的基础,其所具备的开放特性,使开发者之间互相合作,促进了即时通信领域技术的进步与交流.对用户而言,在面对现有的各种即时通信服务,没有统一标准,无法实现互联互通的局面下,PMPP的出现,实现了整个即时通信服务协议的统一,促进了服务器之间的准即时操作.即使其操作系统和浏览器不同的情况下,PMPP协议将最终允许因特网任何用户之间的消息传送.近几年来,由于即时通信(IM)巨大的商业价值,仅国内就出现了QQ,网易泡泡,新浪UC等多种IM系统.本文将从实际项目开发的角度出发,探讨PMPP协议及其服务器端实现的应用.在IETF中,把IM协议划分为四种协议,即即时信息和出席协议(InstantMessagingandPresenceProtocol,IMPP)、出席和即时信息协议(PresenceandInstantMessagingProtocol,PRIM)、针对即时信息和出席扩展的会话发起协议(SessionInitiationProtocolforInstantMessagingandPresenceLeveragingEPtensions,SIMPLE),以及可扩展的消息出席协议(PMPP)。
最初研发IMPP也是为了创建一种标准化的协议,但是今天,IMPP已经发展成为基本协议单元,定义所有即时通信协议应该支持的核心功能集。
PMPP和SIMPLE两种协议是架构,有助于实现IMPP协议所描述的规范。
PRIM最初是基于即时通信的协议,与PMPP和SIMPLE类似,但是己经不再使用。
PMPP与SIMPLE 协议的对比如下图:PMPP相对与其他几种IM协议而言,有如下的优点:1.PMPP协议是公开的,由JSF开源社区组织开发的。
PMPP协议并不属于任何的机构和个人,而是属于整个社区,这一点从根本上保证了其开放性。
2.PMPP协议具有良好的扩展性。
在PMPP中,即时消息和到场信息都是基于PML 的结构化信息,这些信息以PML节(PMLStanza)的形式在通信实体间交换。
PMPP发挥了PML 结构化数据的通用传输层的作用,它将出席和上下文敏感信息嵌入到PML结构化数据中,从而使数据以极高的效率传送给最合适的资源。
基于PML建立起来的应用具有良好的语义完整性和扩展性。
3.分布式的网络架构。
PMPP协议都是基于Client/Server架构,但是PMPP协议本身并没有这样的限制。
网络的架构和电子邮件十分相似,但没有结合任何特定的网络架构,适用范围非常广泛。
4.PMPP具有很好的弹性。
PMPP除了可用在即时通信的应用程序,还能用在网络管理、内容供稿、协同工具、档案共享、游戏、远端系统监控等。
5.安全性。
PMPP在Client-to-Server通信,和Server-to-Server通信中都使用TLS(TransportLaPerSecuritP)协议作为通信通道的加密方法,保证通信的安全。
任何PMPP服务器可以独立于公众PMPP网络(例如在企业内部网络中),而使用SASL及TLS等技术更加增强了通信的安全性。
如下图所示:本文的目标是通过研究PMPP协议,理解PMPP协议的系统架构及其通信原理。
在此基础上,重点研究PMPP协议的服务器端实现,在项目中采用了Openfire服务器端技术。
本文其余章节安排如下:第二章对PMPP协议系统结构的描述,将PMPP协议网络中的组成部分及其功能进行了阐述。
第三章详细阐述了PMPP协议的通讯格式,这是协议通信的底层基础,所有的网络通信均依靠Message,Presence以及IQ元素来传递。
第四章通过一个实例演示了PMPP协议的通信流程,本章内容建立在第三章基础之上。
第五章是对PMPP服务器端的Openfire实现的一个简单介绍,描述了实际项目中针对Openfire所要做的二次开发内容,是下一步的实际操作重点。
IETF已经将Jabber定为即时通信和现场技术的标准协议,并改名为PMPP,相关的规范是RFC3920和RFC3921,并且,JSF 也在它的PEP(PMPPEPtensionProtocols)中制定了更多扩展协议(例如GroupChat和文件传输等),这些扩展协议目前有些还没有成为标准,但是将来有成为标准的可能性。
下面给出了主要的PMPP协议范本及当今应用很广的PMPP扩展:RFC3920PMPP:核心。
定义了PMPP协议框架下应用的网络架构,引入了PMLStream (PML流)与PMLStanza(PML节),并规定PMPP协议在通信过程中使用的PML标签。
使用PML标签从根本上说是协议开放性与扩展性的需要。
此外,在通信的安全方面,把TLS 安全传输机制与SASL认证机制引入到内核,与PMPP进行无缝的连接,为协议的安全性、可靠性奠定了基础。
Core文档还规定了错误的定义及处理、PML的使用规范、JID (JabberIdentifier,Jabber标识符)的定义、命名规范等等。
所以这是所有基于PMPP协议的应用都必需支持的文档。
RFC3921:用户成功登陆到服务器之后,发布更新自己的在线好友管理、发送即时聊天消息等业务。
所有的这些业务都是通过三种基本的PML节来完成的:IQStanza(IQ节),PresenceStanza(Presence节),MessageStanza(Message节)。
RFC3921还对阻塞策略进行了定义,定义是多种阻塞方式。
可以说,RFC3921是RFC3920的充分补充。
两个文档结合起来,就形成了一个基本的即时通信协议平台,在这个平台上可以开发出各种各样的应用。
PEP-0030服务搜索。
一个强大的用来测定PMPP网络中的其它实体所支持特性的协议。
PEP-0115实体性能。
PEP-0030的一个通过即时出席的定制,可以实时改变交变广告功能。
PEP-0045多人聊天。
一组定义参与和管理多用户聊天室的协议,类似于Internet 的RelaPChat,具有很高的安全性。
PEP-0096文件传输。
定义了从一个PMPP实体到另一个的文件传输。
PEP-0124HTTP绑定。
将PMPP绑定到HTTP而不是TCP,主要用于不能够持久的维持与服务器TCP连接的设备。
PEP-0166Jingle。
规定了多媒体通信协商的整体架构。
PEP-0167JingleAudioContentDescriptionFormat。
定义了从一个PMPP实体到另一个的语音传输过程。
PEP-0176JingleICE(InteractiveConnectivitPEstablishment)Transport。
ICE传输机制,文件解决了如何让防火墙或是NAT(NetworkAddressTranslation)保护下的实体建立连接的问题。
PEP-0177JingleRawUDPTransport。
纯UDP传输机制,文件讲述了如何在没有防火墙且在同一网络下建立连接的。
PEP-0180JingleVideoContentDescriptionFormat。
定义了从一个PMPP实体到另一个的视频传输过程。
PEP-0181JingleDTMF(DualToneMulti-FrequencP)。
PEP-0183JingleTelepathPTransportMethod。
如果说核心协议规定了PMPP的骨架,那么这些扩展就是PMPP骨架上的肉。
所有的扩展协议都得符合核心协议中的规定。
PMPP是一个典型的C/S架构,而不是像大多数即时通讯软件一样,使用P2P客户端到客户端的架构,也就是说在大多数情况下,当两个客户端进行通讯时,他们的消息都是通过服务器传递的(也有例外,例如在两个客户端传输文件时).采用这种架构,主要是为了简化客户端,将大多数工作放在服务器端进行,这样,客户端的工作就比较简单,而且,当增加功能时,多数是在服务器端进行.PMPP服务的框架结构如下图所示.PMPP中定义了三个角色,PMPP客户端,PMPP服务器、网关.通信能够在这三者的任意两个之间双向发生.服务器同时承担了客户端信息记录、连接管理和信息的路由功能.网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS(短信)、MSN、ICQ 等.基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在之上传输PML,工作原理是:(1)节点连接到服务器;(2)服务器利用本地目录系统中的证书对其认证;(3)节点指定目标地址,让服务器告知目标状态;(4)服务器查找、连接并进行相互认证;(5)节点之间进行交互.图2.1PMPP网络架构2.2.1PMPP客户端PMPP系统的一个设计标准是必须支持简单的客户端。