一、概述

由Jeremie Miller于1998年开始这个项目。Jabber是一个开放源码形式组织产生的网络实时通信协议,第一个公开版本于2000年5月发行。Jabber已经由IETF XMPP协议(RFC3290)标准化。2001年成立的Jabber软件基金会于2007年更名为XMPP标准基金会。

XMPP原本是为即时通讯而量身定制,但由于XML Stanza本身是XML元素,在基于XML灵活发展的特性下,使得XMPP也可以适用其它方面,已经得到了IETF的批准。XMPP与IMPP、PRIM、SIP合称四大IM协议主流,在此四大协议中,XMPP是最灵活的。

2005年,Google发布了Google Talk,这是一个IP电话及实时通信的服务,其即时通讯功能采用XMPP。但初期此服务不支持服务器到服务器的通讯功能,所以未完全发挥XMPP的分散特色,虽然任何XMPP客户端都能连接到Google Talk,但是用户如果要登录Google Talk,则必须拥有Google Talk帐号(即Gmail帐号),而用户也无法与公共XMPP网络的用户交谈。自2006年1月17日起,服务器到服务器的通信激活了,Google Talk用户可与其它XMPP公共网络的用户交谈了。

二、架构

XMPP的基本网络架构包含三元素:客户端、服务器、网关,具体如下图:

图1 XMPP基本网络架构图

服务器:承担客户端信息记录、连接管理和信息的路由功能。

网关:承担着异构即时通信系统的互联互通,包括(SMS、MSN、ICQ等)。

Jabber识别符(JID)是用户登录时所使用的帐号,看起来通常像一个电子邮件地址,如:someone@example.com,前半部分是用户名,后半部分是XMPP服务器域名,两个字段以@符号区隔。

假设李雷(LiLei@A.com)想和韩梅梅(HanMeimei@B.net)通话,他们两人的帐号分别在A.com和B.net的服务器上。当李雷发送信息后,过程(见图2)如下:

(1)李雷的XMPP客户端将他的信息传送到A.com XMPP服务器。

(2)A.com XMPP服务器打开与B.net XMPP服务器的连接。

(3)B.net XMPP服务器将信息传送给韩梅梅,如果其当前不在线,则存储信息以待其上线后发送。

图2 XMPP即时通讯实例图

李雷和韩梅梅两人的XMPP服务器由两家不同的业者所提供,而它们彼此通信时,不需要拥有对方服务器的帐号,也不需要成为对方业者的会员,非常方便。

三、协议

基本网络形是客户端通过TCP/IP连接到服务器,然后在之上传送XML。XMPP协议的核心部分就是一个网络上分片段发送XML的流协议,XMPP用TCP传的是XML流。

从<stream>到</stream>构成一个完整的XML文档,<stream>标签就是XML Stream,<message>和</message>即XML Stanza(XML节)。

XMPP核心协议通信的基本模式是先建立一个Stream,然后协商一堆安全之类的东东,中间通信过程如下:

图3 XMPP协议流图

XMPP、QQ、MSN三者协议区别如下:

(1)XMPP用XML传输即时通讯相关指令。

(2)QQ用二进制形式发送。

(3)MSN用纯文本指令+空格+参数+换行符形式发送。

四、资源

常用的XMPP服务器列表在这里,常用的XMPP客户端列表在这里。各类即时通讯软件比较在这里,详细参考文档可以看这里,还有这里

常用的开源服务器有Ejabberd(Erlang)、Openfire(Java),开源客户端有PSI,开源客户端库有gloox(C++),客户端软件有spark、gajim、pandion、pidgin等。

鹰语狂们往下看吧

XMPP Standards Foundation

XMPP Case Studies

IETF Publishes XMPP RFCs

Jabber.org

Jabber User Guide - End user introduction to XMPP (archive)

IM Protocol Wiki

Podcast: FLOSS 49: XMPP Peter Saint-Andre interviewed by Randal SchwartzLeo Laporte

RFC 3920 - Extensible Messaging and Presence Protocol (XMPP): Core

RFC 3921 - Extensible Messaging and Presence Protocol (XMPP): Instant Messaging and Presence

RFC 3922 - Mapping the Extensible Messaging and Presence Protocol (XMPP) to Common Presence and Instant Messaging (CPIM)

RFC 3923 - End-to-End Signing and Object Encryption for the Extensible Messaging and Presence Protocol (XMPP)

XEP-0025: Jabber HTTP Polling

Jabber Software Foundation Renamed to XMPP Standards Foundation

XEP-0124: Bidirectional-streams Over Synchronous HTTP

Jabber/XMPP协议与架构的更多相关文章

  1. 即时聊天IM之一 XMPP协议简述

    合肥程序员群:49313181.    合肥实名程序员群:128131462 (不愿透露姓名和信息者勿加入) Q  Q:408365330     E-Mail:egojit@qq.com  综述: ...

  2. XMPP协议的原理介绍

    XMPP(可扩展消息处理现场协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现场探测.它在促进服务器之间的准即时操作.这个协议可能最终允许因特网用户向因特网上的其他任何人发送 ...

  3. (转)基于即时通信和LBS技术的位置感知服务(二):XMPP协议总结以及开源解决方案

    在<基于即时通信和LBS技术的位置感知服务(一):提出问题及解决方案>一文中,提到尝试使用XMPP协议来实现即时通信.本文将对XMPP协议框架以及相关的C/S架构进行介绍,协议的底层实现不 ...

  4. Openfire与XMPP协议

    关于xmpp协议可以参考:http://www.jabbercn.org 什么是OpenFire Openfire 采用Java开发,开源的实时协作(RTC)服务器基于XMPP(Jabber)协议. ...

  5. XMPP协议相关知识

    XMPP协议的组成 主要的XMPP 协议范本及当今应用很广的XMPP 扩展: RFC 3920 XMPP:核心.定义了XMPP 协议框架下应用的网络架构,引入了XML Stream(XML 流)与XM ...

  6. xmpp 协议详解

    XMPP(可扩展消息处理现场协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现场探测.它在促进服务器之间的准即时操作.这个协议可能最终允许因特网用户向因特网上的其他任何人发送 ...

  7. 基于XMPP协议的手机多方多端即时通讯方案

    一.开发背景 1.国际背景 随着Internet技术的高速发展,即时通信已经成为一种广泛使用的通信方式.1996年Mirabilis公司推出了世界上第一个即时通信系统ICQ,不到10年间,即时通信(I ...

  8. 开源Jabber(XMPP) IM服务器介绍

    一.摘要 这是我粗略读了一遍Jabber协议和相关技术文章后的产物,有些地方不一定准确.在文章中引用的一些代码来自www.jabber.org上的文章. 二. 什么是Jabber    Jabber就 ...

  9. 转:XMPP协议、MQTT协议、HTTP协议、CoAP协议的基本比较

    一.先看下相关国外的专业数据对四大协议的比较: Protocol                                    CoAP                         XMP ...

随机推荐

  1. C++ Variables and Basic Types Notes

    1. Type conversion: If we assign an out-of-range value to an object of unsigned type, the result is ...

  2. TDD三个阶段

    TDD的三个阶段 红灯.绿灯.重构 :明确了实施TDD所要遵循的工作流 (需求--->测试-->代码[重构]) 红灯阶段:      为不存在的代码编写测试 绿灯阶段:      仅编写适 ...

  3. http://www.oschina.net/translate/elasticsearch-getting-started?cmp

    http://www.oschina.net/translate/elasticsearch-getting-started?cmp

  4. cojs 奈特 题解报告

    才知道knight念奈特,而不念科耐特 这个题显然是一个数据结构题目,我搬运的CF上的题 CF的题解好长超长哒,而且可以在线,但是并不能看懂 于是自己想了一个一种做法A掉了,唯一的缺陷就是做法有些繁琐 ...

  5. 毕向东JAVA视频讲解(第六课)

    用java语言对现实生活中的事物进行描述. 通过类的形式来体现的. 怎么描述呢? 对于事物描述通常只关注两方面. 一个是属性,一个是行为. 只要明确该事物的属性和行为并定义在类中即可. 对象:其实就是 ...

  6. PROPAGATION_REQUIRED事务管理

    转载:http://blog.csdn.net/l345480242/article/details/7588393 采用编程式事务 1. getCurrentSession()与openSessio ...

  7. FastDFS_v5.05安装配置

    废话不多讲,启动FastDFS文件服务器的命令是 #/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf #/usr/bin/fdfs_storaged /etc ...

  8. 261. Graph Valid Tree

    题目: Given n nodes labeled from 0 to n - 1 and a list of undirected edges (each edge is a pair of nod ...

  9. 48. Rotate Image

    题目: You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwis ...

  10. EF 实体关系

    基于共享主键的一对一: this.HasRequired(t => t.TRDConInfo) .WithOptional(t => t.TRDFoundationProjCheck); ...