`
vanadiumlin
  • 浏览: 495108 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论
阅读更多

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

二. 什么是Jabber
    Jabber就像ICQ,MSN一样,是一个基于Internet的即时通讯系统,但是同这些即时通讯软件不同的是,它是一个开放的即时通讯系统,也是一 个基于XML Stream 的协议,用于在Internet上的两个实体之间交换信息,现场状态(divsence)和其他的结构化信息。你可以自己架设自己的Jabber服务器, 使用不同的Jabber Client 软件,而不象ICQ或MSN一样,依赖于AIM或MSN的服务器和软件。
  第一个Jabber技术在 1998由Jeremie Miller 开发,到目前为止,Internet上已经有数以万计的Jabber服务器和数以百万的Jabber用户。IETF已经将Jabber定为即时通讯和现场 技术的标准协议,称为XMPP(Extensible Messaging and Presence Protocol),相关的规范是RFC3920和RFC3921,并且,JSF(Jabber Software Foundations)也在它的JEP中制定了更多扩展协议(例如GroupChat和文件传输等),这些扩展协议目前还没有成为标准,但是将来有成为 标准的可能。
  作为一个标准协议,目前有大量的基于各种语言,各种平台,和各种 license (商业,GPL, Apache )和Open Source的Jabber服务器和Client端被开发出来,同时还有大量的Library,在这些Library的基础上,大家可以自己开发自己的 Jabber应用。
    更多的信息,请看www.jabber.org
三. Jabber的使用
    Jabber使用同其他的即时通讯软件差不多,你根据你的平台,下载一个Jabber的Client (例如windows 下的Exodus, linux下的Gabber, PSI等),在Internet上寻找一个Jabber服务器(例如Jabber.cn),注册一个帐号,然后再通讯列表 中加入你的好友,就可以开始聊天了。你也可以自己架设一个自己的Jabber服务器,这需要先下载相应的Jabber服务器软件(例如Jive, Jabberd等),安装配置后,把这个服务器的地址告诉你的朋友,你们就可以拥有一个自己的即时通讯服务器了。
  Jabber可以实现不同即时通讯软件之间互联互通。例如,通过一个Jabber Client,你可以用你的MSN或ICQ帐号,通过Jabber网关登陆到MSN或ICQ 服务器上,和你的MSN和ICQ好友进行通讯。
    在实时通讯的功能上,Jabber同其他的即时通讯软件没有什么太大的不同,普通的即时通讯;群组聊天,好友列表的分类,上线提醒等,这些功能随着具体Jabber Client软件的不同而略有不同,但大体上都是差不多的。
四. Jabber的架构
    Jabber从结构上来,更类似于一个邮件服务器,它是分布式的,也就是说,并不象其他即时通讯软件那样,所有的即时通讯用户都连接到同一个服务器上,而是象邮件服务器那样,不同的用户连接到自己的服务器上,在服务器之间通过一个标准协议来交换信息
一个实体在Jabber网络上被称为一个接点,它有唯一的标识,被称为JID,统称用来表示一个Jabber用户,但是也可以表示其他内容,例如一个聊天室。它的格式是node@domain/resource, node@domain有点类似电子邮件的地址格式,resource用来表示node不同的设备或位置,这个是可选的,例如我在Server1上注册了一个用户,用户名为doom,那么我的JID就是doom@server1, 在发送消息时,指明doom@server1就可以了,resource可以不用指定,但我在登录到这个Server时,我的JID可能是doom@server1/exodus(如果我用Exodus软件登录),也可能是doom@server1/psi(如果我用psi登录)
   Jabber是一个典型的C/S 架构,而不是象大多数即时通讯软件一样,使用P2P的架构,也就是说在大多数情况下,在两个Client进行通讯时,他们的消息都是通过Server传递 的(也有例外,例如在两个Client传输文件时)。采用这种架构,是为了简化Client端,将大多数工作放在Server段进行,这样,Client 端的工作就比较简单,而且,当增加功能时,多数是在Server端进行。
  Jabber是一套基于XML Stream的协议,当一个Jabber Client连接到一个Jabber Server上时,Client建立了一个从Client到Server的XML流,Server也同时建立了一个从XML到Server的XML流,这 个流看起来像这个样子:
   |--------------------|
   |            |
   |--------------------|
   |          |
   |             |
   |         |
   |--------------------|
   | |
   |        |
   |      |
   |--------------------|
   |      |
   |        |
   |           |
   |--------------------|
   | ...             |
   |--------------------|
   |       | 所有的信息都是以XML格式加入到这个流中(这些信息被称为stanzas),例如如下的消息:
 from='juliet@capulet.com' to='romeo@montague.net'>
   Wherefore art thou, Romeo?
 
    因为是XML格式的数据,用户可以自己对数据进行扩充,加入自己的基于XML的私有数据。
五. XMPP协议简单介绍
   XMPP在2004年10 月被IETF认定为标准协议,它包括RFCS 3920和RFCS 3921,其中,3920被称为Extensible Messaging and Presence Protocol (XMPP): Core,描述了Jabber 中XML Stream的核心技术,包括安全和国际化的一些技术; 3921被称为Extensible Messaging and Presence Protocol (XMPP): Instant Messaging and Presence,主要是基于即时通讯的一些技术,例如通讯列表,黑名单等。
IETF还制定了两个扩展协议,3922,被称为Mapping the Extensible Messaging and Presence Protocol (XMPP) to Common Presence and Instant Messaging (CPIM);3923,被称为 End-to-End Signing and Object Encryption for the Extensible Messaging and Presence Protocol (XMPP)。
同时,JSF还制定了一系列有关Jabber的扩展协议,称为JEPS(Jabber Enhancement Proposals) ,用来制定一些Jabber的扩展功能,这些协议虽然还没有称为XMPP的一部分,但估计也是迟早的事情。
以下是XMPP中的一些需要特殊说明概念:
Message:Stream的一个子元素,,用来表示传输的消息,有一些相关属性,例如to, from, type等,来表明发送方或接受方,它可以包括一些子元素,例如,等,当用户发送一条信息时,就会在流的上下文中插入一个Message元素,中间有相关的信息。
Gateway: 用于把XMPP协议转化为非XMPP协议,或将非XMPP协议转化为XMPP协议,应用于Jabber同其他IM的通讯,或是其他系统,例如Email
Presence: Stream的一个子元素, 用来表明用户的状态,如在线,离线等,当用户离线或改变自己的状态时,就会在stream的上下文中插入一个Presence元素,来表明自身的状态。
I/Q: Info/Query Stream的一个子元素,,一种请求/响应机制,从一个实体从发送请求,另外一个实体接受请求,并进行相应。例如,client在stream的上下文 中插入一个元素,向Server请求得到自己的好友列表,Server返回一个,里面是请求的结果。
Subscriptions: 订阅机制,用来保证用户可以管理订阅指定用户的Presence
TLS/SASL: Jabber的安全认证机制(这部分我没有太看懂,大意是,在Client和Server,Server和Server进行通讯前,必须有一套安全机制进行认证,在经过认证后,才能进行通讯 TLS和SASL就是基于认证的两种技术)
六. Jabber的发展趋势
    我个人觉得,由于MSN,QQ,ICQ经过多年发展,已经拥有庞大的消费级终端用户群,对这些用户来说,Jabber高举开放协议的大旗在这方面并没有多 少优势而言。同时在这些即时通讯软件所上的附加功能越来越多(例如语音,视频,游戏等),Jabber在这方面功能较弱。但是,我觉的在企业即时通讯和应 用领域,可能会有比较大的作为。目前的商业的Jabber软件,针对的都是企业即时通讯服务。
    由于Jabber是基于XML的流传输协议,它更适合与传输结构化的信息,这样,在企业的应用领域,会有比较大的发展前途,比较典型的就是,Jabber 已经作为COE(公共操作环境)的一部分,在美军的FBS(Future Combat Systems)系统中提供服务,用于提供Chat服务和接受来自传感器的战场信息,使得实时信息可以单兵作战平台,传感器和其他资源间传送。
    同时,由于Jabber跨平台的特性,已经出现了支持Jabber的IP电话和手持设备;有报道说,已经有公司在Jabber的基础上开发订阅/分发平台。
    正如Jabber 的创始人Jeremie Miller所希望的,Jabber将来可能更加用于实时的XML数据传输上,而不是仅仅作为一个即时通讯的平台。

七.常用开源Jabber
1. Openfire (Wildfire) 3.x
授权: GPL or 商用
操作系统平台:所有(使用Java开发)
XMPP Jabber 协议实现情况:98%
Tim 评价:
安装和使用非常简单,安装后进入Web界面进行2~3分钟的配置所有的东西都设好了。使用Java语言开发,在目前Java开发人员到处普及的情况下进行 维护和扩展的成本非常低。在我的测试中加上 Connection Manager 的情况下单台服务器可支持 30 万并发用户。缺点是目前还不支持cluster。如果企业内部部署IM使用 Wildfire + Spark 是最佳的组合。


2. ejabberd
授权: GPL
操作系统平台:Linux, Windows, MacOS X 等
XMPP Jabber 协议实现情况:91%
Tim 评价:
Ejabberd目前是可扩展性最好的一种Jabber/XMPP服务器,支持分布多个服务器,并且具有容错处理,单台服务器失效不影响整个cluster运作。
顾虑就是它采用一种大家都没听过的语言Erlang开发,所以很多人可能会象我一样因为这个原因放弃了它。

3. Jabberd 2.x
授权: GPL
操作系统平台:主要是 Linux, (Windows 也支持,但不知道性能怎样)
XMPP Jabber 协议实现情况:76%
Tim 评价:
自从jabber.org改用ejabberd之后,Jabberd一直都在走下坡路。扩展性比不上ejabberd, 易用性比不上 Wildfire,唯一的优势是使用C开发,如果你坚持要用C开发,那么还是选择jabberd吧。

4. Jabberd 1.x
授权: GPL
操作系统平台:主要是 Linux, (Windows 也支持,但不知道性能怎样)
XMPP Jabber 协议实现情况:45%
Tim 评价:
在几年前 jabberd 就是 Jabber 的代名词,至今很多 Jabber 文档仍然介绍的是 Jabber 1.4,
在我以前写的《Jabber 服务器占有率比较》中仍然排名第一。但是它很多新的规范都不支持,相信大部分用户都将转向新的服务器。


5. 后起之秀 DJabberd
授权: open source
操作系统平台:主要是 Linux, (Perl写的,其他平台应该也支持)
XMPP Jabber 协议实现情况:N/A
Tim 评价:
djabberd 使用 epoll 技术,理论上单台服务器可以支持更多用户。Djabberd目前主要应用在LiveJournal上,大部分XMPP协议都支持,稳定性也不用置疑。但是因为推出时间尚短,很多细节功能可能需要时间慢慢完善。

分享到:
评论

相关推荐

    jabber协议分析及开发文档

    包含①《Instant Messaging in Java,The Jabber Protocols》、②《Developing Applications Using Jabber》、③RFC-3920、④RFC-3921。 ①英文文档,详细分析jabber协议。This book is dedicated to the Jabber ...

    JeCat-Jabber PHP开源即时通讯软件[Version 0.1]

    顾名思义 JJ 使用 Jabber 协议(XMPP) ,因此可以 和 包括 GTalk 在内的 其它任何 XMPP 即时通讯软件 聊天。 JJ 项目的初衷在于 演示 桌面窗口 和 PHP 多任务处理,这两大 在长期在 PHP程序员 眼中 几乎是“不可能”...

    思科Jabber令企业协作轻而易举

    Cisco Jabber 是一个统一通信应用程序,让您能够随时随地在任何设备上实现更高的工作效率,找到合适人选。看看他们能否有空用您的首选方式进行协作。当今全球范围内分布式的工作环境给员工们带来了重大挑战,这不仅...

    jabber概述

    Jabber是一个由开源社区发起并领导开发的即时消息和在线状态的系统。Jabber系统和其它即时消息(IM)服务的一个功能上的差别在于Jabber拥有开放的XML协议。在保持Jabber1.0版本有关消息核心以及在线状态的协议的基础...

    Jabber 协议 概述

    Jabber是一个由开源社区发起并领导开发的即时消息和在线状态的系统。Jabber系统和其它即时消息(IM)服务的一个功能上的差别在于Jabber拥有开放的XML协议。在保持Jabber1.0版本有关消息核心以及在线状态的协议的基础...

    cisco jabber

    cisco jabber下载,

    Jabber服务协议的概述

    1.4版Jabber服务协议的概述,即时通信.

    cisco jabber Windows软件

    cisco jabber 软件

    思科视频会议jabber

    思科视频会议jabber,MAC端软件,支持思科视频会议接入。

    cisco jabber for android 8.6.1

    Turn your Android into an IP Phone with Cisco Jabber for Android. IMPORTANT: Cisco Jabber for Android requires an account with your company's Cisco Unified Communications Manager™ and will not work ...

    Cisco Jabber for Mac-12.5.1

    使用 Cisco Jabber,无论在什么地方、使用什么设备都能提高效率。找到您要找的人,查看他们是否有空,然后以你们希望的工作方式进行协作。使用Cisco Jabber 访问在线状态信息、即时消息、语音、视频、桌面共享和会议...

    思科视频会议软件jabber

    思科视屏会议移动端软件-jabber,windows版本,支持思科视频会议接入。

    Jabber Guest与基于HTML5的实时协作 .pptx

    Jabber Guest与基于HTML5的实时协作 .pptx

    网络通信 jabber协议

    网络通信协议,对于学习jabber的朋友应该有所帮助

    Jabber 协议 即时消息和在线状态的系统

    Jabber 协议 即时消息和在线状态的系统

    Cisco Jabber For MacOS 12.5.1

    cisco jabber for mac最新版,如有需要的请下载,注意:windows用户勿下载

    Cisco Jabber for Android-12.0

    使用 Cisco Jabber,无论在什么地方、使用什么设备都能提高效率。找到您要找的人,查看他们是否有空,然后以你们希望的工作方式进行协作。使用Cisco Jabber 访问在线状态信息、即时消息、语音、视频、桌面共享和会议...

    Cisco Jabber for Windows 12.5.1

    使用 Cisco Jabber,无论在什么地方、使用什么设备都能提高效率。找到您要找的人,查看他们是否有空,然后以你们希望的工作方式进行协作。使用Cisco Jabber 访问在线状态信息、即时消息、语音、视频、桌面共享和会议...

    论文研究-基于Jabber的即时通信服务器的设计与实现 .pdf

    基于Jabber的即时通信服务器的设计与实现,陈艳丽,王海涛,本文首先简要的介绍了Jabber及其特点。然后着重的分析了Jabber服务器的架构及其各功能模块。最后给出了主要模块的实现方法。

    Cisco Jabber 服务器设置 中文

    Cisco Jabber for Windows 服务器安装和设置方法

Global site tag (gtag.js) - Google Analytics