1. 概述
1.1 Jabber & Xmpp
Jabber(XMPP- Extensible Messaging and Presence Protocol)协议,是一个开源的即时消息协议,建立在jabber协议上的IM客户端可以互连。关于XMPP的两个官方网http://www.xmpp.org/ 和http://www.jabber.org/。
支持jabber协议的IM软件非常多 其中包括开源不开源的。参见:
http://www.jabber.org/clients(全部开源),主要以桌面客户端软件的形式运行,可以在一个界面上登陆msn,jabber,gtalk等。
http://www.laosafu.com/bbs/viewthread.php?action=printable&tid=202752(多数不开源)主要以web页面的方式提供msn,jabber,gtalk等登陆。
2. 引用:
XMPP Software 官方软件列表
3. XMPP服务器
xmpp官方服务器列表: http://xmpp.org/xmpp-software/servers/
3.1 Openfire (Wildfire) - Java
授权: GPL or 商用
操作系统平台:所有(使用Java开发)
XMPP Jabber 协议实现情况:98%
Tim 评价:
安装和使用非常简单,安装后进入Web界面进行2~3分钟的配置所有的东西都设好了。使用Java语言开发,在目前Java开发人员到处普及的情况下进行维护和扩展的成本非常低。在我的测试中加上 Connection Manager 的情况下单台服务器可支持 30 万并发用户。缺点是目前还不支持cluster。如果企业内部部署IM使用 Wildfire + Spark 是最佳的组合。
见:http://hi.baidu.com/jabber/blog/category/Wildfire
Openfire介绍:
ü 能支持多种数据库()。
ü 安装、配置比较容易,配置和管理是基于web页面的。
ü 提供较为坚实安全保障和良好的性能。
ü 双重授权(Open Source GPL & commercially),服务器是开源的,一部分可选组件企业级插件(不开源)。
ü 易于同其他系统集成。
ü 的开发语言为java。
ü 运行平台为windows、linux、MAC OS X。
ü 支持文档比较全面。
ü 要求jdk1.5以上的运行环境。
ü
Openfire开源系列包括
Openfire服务器
一个跨平台,采用Java开发,开源的实时协作(RTC)服务器基于XMPP(Jabber)协议。Openfire安装和使用都非常简单,并利用Web进行管理。单台服务器可支持上万并发用户。
Spark安装客户端
Openfire的客户端为spark,Spark支持聊天,语音,视频,会议,文件收发,截屏,连接msn等功能。
Spark WEB客户端
基于WEB的客户端,不支持保存聊天记录,不能传递文件,不支持声音视频等。
Tinder 类库
将Openfire, Whack和 ConnectionManager项目中的部分代码独立出来,提供一个轻量级的 XMPP 运行,让开发人员复用Openfire的基本功能。
XIFF类库
XIFF框架是一个flash类库,通过XMPP协议连接服务器。
smack类库
Smack类库可以模拟客户端与服务器进行通信。
源代码下载地址:http://fisheye.igniterealtime.org/browse/
安装及源代码下载地址:http://www.igniterealtime.org/downloads/index.jsp
安装文档:Openfire+Spark+Spark Web安装配置
3.2 ejabberd - Erlang
授权: GPLv2
操作系统平台:Linux, Windows, MacOS X 等
XMPP Jabber 协议实现情况:91%
评价:
Ejabberd目前是可扩展性最好的一种Jabber/XMPP服务器,支持分布多个服务器,并且具有容错处理,单台服务器失效不影响整个cluster运作。
采用Erlang/OTP开发。它的特点是,跨平台,容错,集群和模块化。
3.3 Jabberd 2.x – C++
授权: GPL
操作系统平台:主要是 Linux, (Windows 也支持,但不知道性能怎样)
XMPP Jabber 协议实现情况:76%
评价:
自从jabber.org改用ejabberd之后,Jabberd一直都在走下坡路。扩展性比不上ejabberd, 易用性比不上 Wildfire,唯一的优势是使用C开发,如果你坚持要用C开发,那么还是选择jabberd吧。
Jabberd2介绍:
ü 较广泛的支持数据库(MySQL, PostgreSQL, SQLite, BerkeleyDB, Oracle, LDAP, PAM等)。
ü 支持动态虚拟主机创建(Virtual hosts with dynamic mass-virtual-hosts creation feature)Jabberd2支持基于ACL的主机访问控制和包过滤的xmpp路由(Host based ACLs and packet filter for policy XMPP routing control)。
ü 可运行平台为Linux, *BSD, Solaris 和 Windows 32。
ü 支持多种jabber客户端。
ü 的开发语言为C/C++。
ü 支持LDAP 和PAL认证。
ü 支持DIGST-MD5 、PLAIN和匿名的SASL机制。
ü 支持XSF(XMPP的最新扩展)。
3.4 Jabberd 1.x – C++
授权: GPL
操作系统平台:主要是 Linux, (Windows 也支持,但不知道性能怎样)
XMPP Jabber 协议实现情况:45%
Tim 评价:
在几年前 jabberd 就是 Jabber 的代名词,至今很多 Jabber 文档仍然介绍的是 Jabber 1.4,
在我以前写的《Jabber 服务器占有率比较》中仍然排名第一。但是它很多新的规范都不支持,相信大部分用户都将转向新的服务器。
见:http://hi.baidu.com/jabber/blog/item/7d25bb199f31a44542a9ad02.html
Jabberd14介绍:
ü 是开源和免费的(open source&free)。
ü 是xmpp的原型实现机支持比较早版本的xmpp协议,也支持较新版本的。
ü 具有较好的模块化特征。
ü 使用C/C++编写的,并且有相应的API文档,便于对其进行拓展。
ü 能较好的提供安全支持(主要是加密协议方面)。
ü 的配置和部署比较灵活。
ü 易于定制/集成到网站中。
ü 支持DIGST-MD5 和PLAIN 的SASL机制。
ü 可运行平台为Linux, *BSD, Solaris 和 Windows 32。
ü 仅支持Mysql数据库或者文件系统存储。
ü 功能较少。
3.5 DJabberd - Perl
后起之秀
授权: open source
操作系统平台:主要是 Linux, (Perl写的,其他平台应该也支持)
XMPP Jabber 协议实现情况:N/A
Tim 评价:
djabberd 使用 epoll 技术,理论上单台服务器可以支持更多用户。Djabberd目前主要应用在LiveJournal上,大部分XMPP协议都支持,稳定性也不用置疑。但是因为推出时间尚短,很多细节功能可能需要时间慢慢完善。
djabberd介绍见:http://hi.baidu.com/jabber/blog/category/Djabberd
3.6 doubango –C++
这个东西自己介绍的东西很全面,但是其依赖的库太多,公司网络下载源码时太慢了,编译一半,不编译了。
Doubango Telecom is a young Telco company focused on open source projects. We are specialized in NGN technologies (3GPP, TISPAN, Packet Cabel, WiMax, GSMA, RCS-e, IETF...standards), audio/video coding, cloud computing and WebRTC.
Our products include SIP/IMS (VoIP) clients/servers/gateways, TelePresence and Telemedicine systems, VNC stacks and audio/video codecs. Most of our products are already open sourced.
3.7 Vysper - JAVA
Vysper 旨在成为一个模块化的,全功能的 XMPP(jabber)服务器软件。基于 MINA 网络框架开发。
3.8 Trumpeter - JAVA
资料找不到。
3.9 xmpp-go - GO
xmpp-go 是 Go 语言实现的兼容 XMPP 协议的客户端和服务器端。
3.10 go-xmpp
go-xmpp 是另外一个 XMPP 协议的 GO 语言实现。
4. XMPP-客户端
xmpp官方客户端列表: http://xmpp.org/xmpp-software/clients/
4.1 Hemlock多框架
Hemlock使用XMPP MUC chatroom作为多人交互应用的通道,通过flash长连到XMPP Server上。由于XMPP Server(如openfire, ejabberd等)本身就支持多服务器,因此使用默认的版本就可以支持上十万的并发,如果稍加优化,同时支持上百万用户也不会有太大问题。
4.2 Mina - JAVA
Mina是一个高性能的Java异步网络通讯框架。当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程序(只在最新的预览版中提供),MINA 所支持的功能也在进一步的扩展中。
4.3 Pidgin – C
比较热
pidgin是一个可以在Windows、Linux、BSD和Unixes下运行的多协议即时通讯客户端,可以让你用你所有的即时通讯帐户中一次登录。
pidgin支持的通讯:
Ø AIM
Ø Bonjour
Ø Gadu-Gadu
Ø Google Talk
Ø Groupwise
Ø ICQ
Ø IRC
Ø MSN
Ø MXit
Ø MySpaceIM
Ø SILC
Ø SIMPLE
Ø Sametime
Ø XMPP
Ø Yahoo!
Ø Zephyr
4.4 Gloox – C++
Ans. 老牌库,推荐
gloox是一个稳定功能完整的XMPP客户端库, 使用ANSI C++编写, 使用它编写标准客户非常容易, 并能将Jabber/XMPP功能集成到现有的应用程序中, gloox遵循GNU GPL许可协议, 支持商业许可.
特点:
1. 易于使用
2. 可扩展性好
3. 平台无关性(支持多种操作系统)
4. 完整的开发文档
5. 完全支持XMPP核心协议及几乎所有的XMPP IM协议
6. 支持TLS和SASL安全认证
7. 支持名册管理
8. 支持隐私名单
9. 支持SRV查找
10.支持服务器认证方式
11.支持xml:lang
4.5 Iris – C++ QT
Ans. Qt的,慎用
Iris是基于Qt/C++库编写的XMPP/Jabber协议库,目前它仍然处于开发阶段,但已经支持了许多重要的功能。设计目标是全力支持XMPP协议的正式草案, 库功能强大且易于使用的,由于大量使用Qt的结构和数据类型, 对于创建客户端,服务器和其他组件非常有用.
特点:
1. 支持XMPP核心协议包括:
1) DNS服务查询
2) SSL/TLS安全认证
3) SASL加密认证
5) 早期的jabber:iq:auth login
6) 资源绑定
7) 支持HTTP连接及Socket5,http代理
8) 高级对象流处理
2. 支持的XMPP-IM协议
1) 消息交换
2) 出席广播与接收
3) 名册管理
4) 订阅功能
3. JEP扩展
1) 版本时间要求
2) 服务发现
3) Jabber账号注册
4) 密码更改
5) 代理注册
6) VCards
7) 基本组聊天
8) S5B直接连接
9) 文件传输
开发计划:
1. 完成支持XMPP核心协议的基本服务
2. 确保XMPP的核心完全匹配草案
3. 编写XMPP的核心文档API
4. 撰写完整XMPP的即时通讯的API
5. 其他重要规格:x:data, MUC等等
4.6 QXmpp – C++ QT
Ans. Qt的,慎用
QXmpp是一个跨平台的C++ XMPP客户端开发库, 它是基于Qt库开发的.
QXmpp是非常直观,易于使用, Qt是唯一的第三方依赖库, 用户需要一个有C ++和Qt的基础知识(Qt的信号与槽和数据类型)及开发经验。基础的TCP套接字和XMPP协议的RFC ( RFC3920和RFC3921 )已被封装到类和函数 必要时可以扩展, 所以,用户不需要处理这些细节。
说明文档比较少, 没找到!!!
4.7 oajabber – C++
Ans. 很久没更新,单人开发,慎用
oajabber是一个支持XMPP/Jabber协议的C++库, 可扩展及灵活性好,它的目标是实现最完整的XMPP/Jabber协议的C++库, 这在很大程度上依赖于有oapr对线程和网络的处理及Xerces-C对XML的解析.
4.8 iksemel – C++
Ans. 接口太复杂,慎用
iksemel是一个为Jabber应用而设计的XML(可扩展标记语言)解析器库。
1. 高度便携,可在所有的POSIX环境和Windows(via mingw)环境下构建
2. 适用于嵌入式系统。代码小,高度模块化,可以削减不必要的部分。内存使用量低,解析器速度相当快。
3. 提供的SAX,DOM和XMPP协议分析器。
4. 支持TLS和SASL安全认证
5. 仅支持UTF-8编码
6. 完整的文档及示例
4.9 loudmouth– C++
Ans. C的,接口太多,慎用
loudmouth是一个用C/Glib编写的轻量级jabber客户端库, 易于使用和扩展, 可跨平台.
4.10 libstrophe – C++
Ans. C的,有C++封装,可以考虑
libstrophe是一个XMPP协议的客户端和组件通信的C库。我们的目标是建立一个库,它是便携式的,可用的快捷,可靠,有据可查,并充分实现的XMPP规范
4.11 Libjingle – C++
Ans. GTalk的库,可以考虑
Libjingle - Google Talk Voice及 P2P 的交互操作函数库
Libjingle是Google提供的C++组件集,它为Google Talk的点对点通讯与语音呼叫功能提供交互操作性。组件包包括了Jingle和Jingle-Audio的google实现的源代码,它们是XMPP标准的推荐扩展,目前试验版可用。
我们发布此代码是为了让消费者们在实时通讯工具的选择和操作性更多些。Google的源码发布基于Berkeley协议,也就是说你可以把它们合并到商业或非商业的软件中并发布。
此外关于Google Talk的互操作性,函数库里有许多通用组件如P2P栈,它可用来创建各样的通信和协作应用程序。我们希望看到更多组织能够使用这项技术建立创新的的应用程序。
下面是函数库各个组件的描述。你可以使用它们中的任一或是全部组件。
base -低级可移植的功能函数
p2p - p2p栈,包括了与XMPP挂钩的客户端和基础p2p函数。
session - 电话呼叫指令以及可变点对点流
third_party - 用于其他功能的非google组件
xmllite -XML解析器
xmpp - XMPP engine
4.12 libpurple – C++
Ans. Pidgin的库,推荐
libpurple is intended to be the core of an IM program. When using libpurple, you'll basically be writing a UI for this core chunk of code. Pidgin is a GTK+ frontend to libpurple, Finch is an ncurses frontend, and Adium is a Cocoa frontend.
4.13 xmpp-go - GO
xmpp-go 是 Go 语言实现的兼容 XMPP 协议的客户端和服务器端。
4.14 客户端-AIM即时通信软件
美国在线推出了Flash版AIM即时通信软件,并把这个服务的名字叫做“AIM Express”.以前美国在线也开发了网页版的AIM,但需要JAVA支持,但IE一直对JAVA不太友好,导致不具有普遍性。现在采用Flash技术,因此在用户体验性方面也很好,甚至支持手机短信。同样支持声音提示,可以添加好友,从试用的过程来看,速度非常流畅,和一般的即使通信软件没有区别。
官方网站 :http://www.aim.com/
通信协议(私有):OSCAR 立即传讯协议和TOC 协议
5. XMPP-web
5.1 Openfire
上面已描述
Openfire 是实时的基于WEB的即时消息传输平台,是原来的Jive Messenger
5.4 JWChat
JWChat是一个功能强大,基于Web的Jabber™客户端。采用AJAX技术开发,这个客户端只用到了JavaScript与HTML。它具备基本的jabber即时消息功能,用户管理,基于MUC协议的群聊天功能。在线演示地址:http://jwchat.org/
6. XMPP SDK
xmpp官方SDK列表: http://xmpp.org/xmpp-software/libraries/
7. XMPP扩展
7.1 JubJub - 记录 XMPP 包
JubJub 是一个服务器端的守护进程用来记录 XMPP 包,模块化架构设计,可灵活的进行配置以处理不同类型的 XMPP 包。
8. 结尾
jwchat 的安装和配置、Service unavailable、Authorization failed问题汇总