开源Jabber(XMPP) IM服务器介绍
一.摘要
二. 什么是Jabber
Jabber就像ICQ,MSN一样,是一个基于Internet的即时通讯系统,但是同这些即时通讯软件不同的是,它是一个开放的即时通讯系统,也是一 个基于XML Stream 的协议,用于在Internet上的两个实体之间交换信息,现场状态(presence)和其他的结构化信息。你可以自己架设自己的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(XMPP) IM服务器介绍的更多相关文章
- 常用开源Jabber(XMPP) IM服务器介绍(转)
1. Openfire (Wildfire) 3.x授权: GPL or 商用操作系统平台:所有(使用Java开发)XMPP Jabber 协议实现情况:98%Tim 评价:安装和使用非常简单,安 ...
- 开源jabber(XMPP)架设内部即时通讯服务的解决方案
Jabber 是著名的即时通讯服务服务器,它是一个自由开源软件,能让用户自己架即时通讯服务器,可以在Internet上应用,也可以在局域网中应用. XMPP(可扩展消息处理现场协议)是基于可扩展 ...
- Converse.js – 开源的 XMPP 聊天客户端
Converse.js 是一个运行在浏览器的免费和开源的聊天客户端.它可以集成到任何网页.类似于 Facebook 的聊天,它也支持多用户聊天室.Converse.js 可以连接到任何可访问的 XMP ...
- SSDB是一个开源的高性能数据库服务器
SSDB是一个开源的高性能数据库服务器, 使用Google LevelDB作为存储引擎, 支持T级别的数据, 同时支持类似Redis中的zset和hash等数据结构, 在同时需求高性能和大数据的条件下 ...
- Java中常见的5种WEB服务器介绍
这篇文章主要介绍了Java中常见的5种WEB服务器介绍,它们分别是Tomcat.Resin.JBoss.WebSphere.WebLogic,需要的朋友可以参考下 Web服务器是运行及发布Web应用的 ...
- 开源实体映射框架EmitMapper介绍
开源实体映射框架EmitMapper介绍 综述 EmitMapper是一个开源实体映射框架,地址:http://emitmapper.codeplex.com/. Emit ...
- Linux系统基础5周入门精讲(服务器介绍)
使用工具:(1)源码管理(git工具):(2)自动部署:(3)web服务器 linux基础 服务器介绍 运维的职责:运行和维护服务器 1数据不能丢----大片不能没 2保证网站7*24小时允许---( ...
- 我的Android进阶之旅】GitHub 上排名前 100 的 Android 开源库进行简单的介绍
GitHub Android Libraries Top 100 简介 本文转载于:https://github.com/Freelander/Android_Data/blob/master/And ...
- 基于SIP和RTP协议的开源VOIP之QuteCom简单介绍
**************************************************************************************************** ...
随机推荐
- android.os.DeadObjectException memory near r0: 异常处理 Consumer closed input channel or an error occurred. events=0x9
原地址:http://www.cnblogs.com/wanqieddy/p/3495338.html android.os.DeadObjectException memory near r0: 异 ...
- Sqlitekit 封装管理
最近需要用到Sqlite数据库来做一个游戏的数据存储.网上搜了一下,两种方法,一种是自己dll搭建环境有可能还需要编译之类的,我自己是搭建出来了,不过我没采用. 还有一种就是使用sqlitekit插件 ...
- Lua基础 函数(一)
转自: http://blog.csdn.net/wzzfeitian/article/details/8653101 在Lua中,函数是对语句和表达式进行抽象的主要方法.既可以用来处理一些特殊的工作 ...
- sql over()---转载
1.使用over子句与rows_number()以及聚合函数进行使用,可以进行编号以及各种操作.而且利用over子句的分组效率比group by子句的效率更高. 2.在订单表(order)中统计中,生 ...
- POJ3461 Oulipo KMP算法
这个算法去年的这个时候就已经听过了,看毛片算法哈哈..不过理解它确实花了我很久的时间..以致于我一直很排斥字符串的学习,因为总觉得太难了,但是有些硬骨头还是要啃的,这个寒假就啃啃字符串还有一些别的东西 ...
- hdu 1575 Tr A(矩阵快速幂,简单)
题目 和 LightOj 1096 - nth Term 类似的线构造一个符合题意的矩阵乘法模版,然后套快速幂的模版,具体的构造矩阵我就不作图了,看着代码也能理解吧 #include<stdi ...
- ubuntu12.10+NDK r9 编译 ffmpeg 的一些参考资料Perhaps you should add the directory containing `libssl.pc'
首先入门级的 编译宝典: https://trac.ffmpeg.org/wiki/CompilationGuide/Android http://www.roman10.net/how-to-bui ...
- 利用纯真ip地址库 查询 ip所属地
1. 首先下周数据源,选择是纯真数据库:http://www.cz88.net/ 2. 安装后,打开软件,将数据导出为txt格式. 3. 处理数据,参照网上的文章(http://www.jb51.ne ...
- 数据类型演示DataTypeDemo
/***数据类型演示*/public class DataTypeDemo{ public static void main(String[] args){ //直接赋予的值,称为字面量 //by ...
- 使用WM_COPYDATA跨进程发送数据
进程之间通讯的几种方法: 在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯.常用的方法有 使用内存映射文件 通过共享内存DLL共享内存 使用SendMessage向另一进程发送WM_ ...