XMPP
XMPP(全称:Extensible Messaging and Presence Protocol,旧名Jabber[1],中文可译为可扩展消息和表示协议)是一种以XML为基础的开放式即时通信协议,是经由互联网工程工作小组(IETF)通过的互联网标准。
国际标准 | RFC 6120 (Core) (2011) RFC 6121 (IM & Presence) (2011) |
---|---|
规范发布 | 1999年 |
使用于 | 即时通信 |
官方网站 | xmpp |
历史
编辑Jeremie Miller于1998年开始了这个项目。第一个公开版本于2000年5月发行。这个项目的主要产品是jabberd,XMPP的服务器端软件。它既可以创建私人的XMPP网络,也可以加入全球的公共XMPP网络。XMPP的关键特色是,分布式的即时通信系统,以及使用XML流。
Jabber已经由IETF XMPP协议(RFC3920)标准化。
Jabber是一个开放源码形式组织产生的网络即时通信协议。XMPP原本是为即时通讯而量身定制,但由于XML Stanza本身是XML元素,在基于XML灵活发展的特性下,使得XMPP也可以适用其他方面,已经得到了IETF的批准。XMPP与IMPP、PRIM、SIP(SIMPLE)合称四大IM协议主流,在此4大协议中,XMPP是最灵活的。
特色
编辑优点
编辑- 标准
- 互联网工程工作小组(IETF)已经将Jabber的核心XML流协议以XMPP之名,正式列为认可的即时通信及Presence技术。而XMPP的技术规格已被定义在RFC 3920及RFC 3921。任何IM供应商在遵循XMPP协议下,都可与Google Talk实现连接。
- 证实可用
- 第一个Jabber(现在XMPP)技术是Jeremie Miller在1998年开发的,现在已经相当稳定;数以百计的开发者为XMPP技术而努力。今日的互联网上有数以万计的XMPP服务器运作著,并有数以百万计的人们使用XMPP即时传讯软件。
- 分布式
- XMPP网络的架构和电子邮件十分相像;XMPP核心协议通信方式是先建立一个stream,XMPP以TCP传递XML资料流,没有中央主服务器。任何人都可以运行自己的XMPP服务器,使个人及组织能够掌控他们的即时传讯体验。
- 弹性佳
- XMPP除了可用在即时通信的应用程序,还能用在网络管理、内容供稿、协同工具、文件共享、游戏、远程系统监控等。
- 多样性
- 用XMPP协议来建造及布署即时应用程序及服务的公司及开放源码计划分布在各种领域;用XMPP技术开发软件,资源及支持的来源是多样的,使得使你不会陷于被“绑架”的困境。
缺点
编辑- 资料负载太重
- 随着通常超过70%的XMPP协议的服务器的资料流量的存在和近60%的被重复转发,XMPP协议目前拥有一个大型架空中存在的资料提供给多个收件人。新的议定书正在研究,以减轻这一问题。
- 二进制资料传输受限
- XMPP传输单一的XML文件,因此要透过XMPP传输二进制资料,需先将二进制资料以Base64编码。但是大量的二进制资料传输,较佳的作法是用外部的其他协议传输,而以XMPP进行沟通。至于其他二进制资料加密会话(encrypted conversations)或图形图标(graphic icons)以嵌入式使用相同的方法。
运作方式
编辑XMPP网络是基于服务器的(即客户端之间彼此不直接交谈),但是也是分布式的。不像AOL即时通或MSN Messenger等服务,XMPP没有中央官方服务器。Jabber.org的公众服务器上有大量的用户,所以有些人误解了,以为它是官方服务器,不过事实上任何人都可以在自己的网域上运行XMPP服务器。
Jabber识别符(JID)是用户登录时所使用的账号,看起来通常像一个电子邮件地址,如someone@example.com;前半部分为用户名,后半部分为XMPP服务器域名,两个字段以@符号区隔。
假设朱丽叶(juliet@capulet.com)想和罗密欧(romeo@montague.net)通话,他们两人的账号分别在Capulet.com及Montague.net的服务器上。当朱丽叶输入消息并按下发送钮之后,一连串的事件就发生了:
- 朱丽叶的XMPP客户端将她的消息发送到Capulet.com XMPP服务器。
- Capulet.com XMPP服务器开启与Montague.net XMPP服务器的连接。
- Montague.net XMPP服务器将消息寄送给罗密欧。如果他目前不在在线,那么存储消息以待稍后寄送。
|
|
|
|
罗密欧与朱丽叶两人的XMPP服务是由两家不同的业者所提供的,而他们彼此传讯时,不须拥有对方服务器的账号,也不须成为对方业者的会员。
与其他协议互联
编辑XMPP协议的另一功能是运输(transports),也被称为网关(gateways),可允许用户透过网络使用其它协议。这可以是其他的即时通信协议,也可以是不同协议,如短信(SMS)或电子邮件。
XMPP协议通过HTTP运输
编辑在原来的规格,XMPP协议可以使用HTTP的方式有两种:轮询(polling)[3]与绑定(binding)[4]。轮询现在不推荐,基本上,轮询意味着HTTP邮件存储在服务端的数据库上,客户端必须一再地以HTTP的GET和POST的方式去抓取(以及刊出)其中的消息。然而使用绑定的方式时,客户端会保留一个长存的HTTP连线,等待一旦服务器有新的消息时,就立刻接收消息。因为轮询的结果往往是服务端没有新消息,这种推送的通知模式比轮询的方式更有效率。
由于客户端使用HTTP,大多数防火墙允许客户端获取和留言没有任何障碍。因此,即使使用XMPP协议的TCP端口被拦截,服务器也能正常地倾听一般的HTTP端口,其上的消息也能保持畅通。还有一些网站更允许大众经由浏览器登录进XMPP。尤有甚者,还有一些公共的服务器同时拥有标准HTTP(80端口)和HTTPS(443端口),因此又有助于通过防火墙。
使用实例
编辑XMPP 服务器的高容错性和低开销[5]使得许多大公司使用 XMPP 作为其基础平台来创建私人信使和聊天,以及提供推送通知[6]。
- WhatsApp ~8 亿用户,使用修改后的XMPP协议进行聊天
- 艺电 ~4000 万用户,使用XMPP进行聊天
- Nintendo Switch NPNS ~3500万台设备。使用XMPP传递新闻、通知和其他消息。[7]
- Odnoklassniki ~4200万用户。 用户之间的内部消息传递通过XMPP客户端提供社交网络连接。
- 英雄联盟 ~2700万用户,使用XMPP进行聊天
- 无冬online ~1600万用户,使用XMPP进行聊天
- 堡垒之夜 ~2.5亿用户,使用XMPP进行聊天
- 星战前夜 ~90万用户,使用XMPP进行聊天
- Google ~15亿用户。使用XMPP传递推送通知。
- 苹果公司 ~5亿用户。使用XMPP传递推送通知。
- 美国国家安全局 ~使用 XMPP 进行内部通信。[8]
- 欧洲议会 ~欧洲议会安全局建议议员使用Cisco Jabber而不是Signal或WhatsApp。[9]
实现
编辑XMPP客户端软件
编辑XMPP协议是由大量的XMPP协议的客户端,服务器和程序库。主要的文章包含了几个XMPP协议清单客户的多种平台。
XMPP服务器端软件
编辑参见
编辑- 即时通讯软件比较
- 流文本定向消息协议(STOMP),由Codehaus开发,基于文本的消息的传输协议,使用类似JMS的`目的地`语义;
- 高级消息队列协议(AMQP),一种面向消息中间件提供的开放的应用层协议;
- 消息队列遥测传输(MQTT),一种轻量级订阅-发布协议。
注释
编辑- ^ Jabber Inc. - About Us. [2009-09-14]. (原始内容存档于2007-07-03).
- ^ Jabber Software Foundation Renamed to XMPP Standards Foundation (页面存档备份,存于互联网档案馆) 1月16日2007年 - jabber.org (页面存档备份,存于互联网档案馆)仍旧被维护
- ^ XEP-0025: Jabber HTTP Polling. [2009-09-08]. (原始内容存档于2020-10-29).
- ^ XEP-0124: Bidirectional-streams Over Synchronous HTTP (BOSH). [2009-09-08]. (原始内容存档于2021-02-13).
- ^ ejabberd Massive Scalability: 1 Node — 2+ Million Concurrent Users | ProcessOne Blog. [2018-06-22]. (原始内容存档于2018-06-22).
- ^ Uses of XMPP. [2018-06-22]. (原始内容存档于2018-06-22).
- ^ ejabberd & Nintendo Switch NPNS | ProcessOne Blog. [2019-06-05]. (原始内容存档于2019-06-05).
- ^ АНБ использует протокол Jabber для чатов — «Хакер». [2018-06-24]. (原始内容存档于2018-06-25).
- ^ EU-Parlament empfiehlt Jabber statt WhatsApp und prüft Signal | heise online. [2019-10-19]. (原始内容存档于2019-10-19).