Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4528106
  • 博文数量: 291
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 7924
  • 用 户 组: 普通用户
  • 注册时间: 2016-07-06 14:28
个人简介

阿里巴巴是个快乐的青年

文章分类

全部博文(291)

文章存档

2018年(21)

2017年(4)

2016年(5)

2015年(17)

2014年(68)

2013年(174)

2012年(2)

分类: 架构设计与优化

2013-02-26 11:35:14

一、概述

        由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流。

        从构成一个完整的XML文档,标签就是XML Stream,即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

        






阅读(3920) | 评论(1) | 转发(1) |
给主人留下些什么吧!~~

scq2099yt2013-02-26 11:35:58

文明上网,理性发言...