Tigase概述

2,142 阅读9分钟

1、为什么选择Tigase

全面:tigase 完全实现了XMPP协议,除了全面实施的两个核心协议,它支持大多数的你可能永远都需要的扩展协议。

开源:Tigase是开源的,如果你有有那能力,你可以定制自己的XMPPServer,虽然经过了很多次此时,但是仍然有可能有bug,你可以修补bug并提交代码到官方。

可靠:Tigase在设计的时候已经充分的考虑到他的容错能力,它的代码可以自动处理错误保证你的应用尽可能的不down掉。它已经被部署在很多企业的生产环境!并且被测试通过

集群支持:Tigase支持集群,通过集群多个节点在一块,支持百万级用户并发,Seesmic是最好的例子。

**性能和效率:**单cpu 单用户连接,只需要10kb的内存就可以处理10000个数据包,安装Tigase的时候已经知道,Tigase支持单机50W并发,另外,Tigase还可以部署在只有10M内存的机器上。Tigase支持虚拟域,单服务器可以安装多个域

**监控策略:**Tigase提供很多开箱即用的自我监控功能。你可以通过XMPP,JMX,Http和SNMP查看服务运行时的错误。

**可扩展:**设计之初,Tigase就是可扩展的,支持自定义插件,开发者可以很轻松的扩展他的功能。插件开发,Tigase支持多种语言,Groovy(建议),Scala,Python,Ruby。

**轻便:**使用Java编写的,它可以在Linux,Windows , Solaris和Mac OSX上运行。大多数其他的开源XMPP服务器都使用低层次的语言或更Java更深奥的语言书写。

**国际化:**Tigase支持UTF-8,允许任何语言。

2、RFC的实现

**核心协议(RFC-3920):**定义了XML流,和构建XMPP系统所需的所有流级别的功能,定义了XMPP的地址格式,基本XMPP架构,传输控制协议(TCP)的消息传输,安全传输层(TLS)的信息加密,简单的安全验证和安全层(SASL)的验证,如何编码,UTF-8和StringGprep用来国际化地址和文本,名称空间,message,presence,IQ的结构,以及如何处理错误。

**即时消息和呈现(RFC-3921):**此协议定义了contact(rosters)如何工作。如何管理订阅,以及如何处理presence通知。

3、Tigase实现的XMPP扩展协议

**结构化数据表单(XEP-0004):**类似HTML表单,数据表单允许实体通过其他(通常是人为控制的Client)实体收集数据。通常用在登陆和搜索上。

隐私列表( XEP -0016 **):**允许实体启用或者禁用和其他实体的通信。简单的说,阻止两用户之间的通信。

**服务发现(XEP-0030):**允许实体查找出另一个实体支持的功能和特性,并发现和该实体相关联的Item。

**群聊消息(MUC,XEP-0045):**类似互联网的中继聊天(IRC)协议,允许很多人在一个虚拟的房间内聊天。定义了如禁言,踢出房间,房间配置等功能。

**私人XML存储(XEP-0049):**该协议定义了私人数据如何在服务端存储。

**工作流管理(XEP-0050):**通常和(XEP-0004)一块使用,提供实体向另一个实体执行远程命令(commands)。

**明信片(XEP-0054):**允许两个实体间以vCard-XML格式共享数据。Vcard是一个标准化的格式来交换名片信息,如姓名,地址,电话号码等。

**通知(pubsub,XEP-0060):**一个一到多的表单消息,允许单一用户传递给多个订阅者。通常用于数据聚合。

**注册(XEP-0077):**主要定义了方法,为客户端通过XMPP流创建通讯账户。只吃聊天室登机,账户密码的修改和账户的注销。

**非SASL认证(XEP-0078):**定义了Jabber的身份验证协议,但是现在已经过时,被RFC3920替代了他的简单身份验证和安全身份验证。

**聊天状态通知(XEP-0085):**定义用户状态和聊天会话期间的通信。例如输入状态等

**软件版本(XEP-0092):**允许一个实体来查询另一个的实体所用软件的详细信息,可以查询名称,版本和操作系统等信息。

**Jabber Component Protocol (XEP-0114):**定义了服务器和外部组件如(MUC)或其他消息网络之间的通信.

**服务管理者(XEP-0133):**允许管理员管理用户,发送消息给所有用户,改变每天登陆的欢迎消息,管理管理员账户,和对服务的重新启动。

**流压缩(XEP-0138):**允许使用ZLIB对XML流进行压缩,对无法使用TLS的平台非常有用。

**及时消息查询(IQ,XEP-0148):**一个扩展协议,用于用户发现比人的信息。没有实际用途。

**更换图像-依赖VCard(XEP-0153):**用于用户更改图像和图像交换。

**个人事件协议(PEP,XEP-0163):**PEP是其他扩展向用户分享状态信息的基础。例如,用户的地理位置,表情,行为,心情等。虽然,通知(XEP-0060)可以实现以上功能,但是比较复杂。PEP是XEP-0060的一个简单的子集。相比于继承Presence节点,最佳的实现是使用PEP和(或者)Jabber组件协议代替。

**使用SASL匿名的最佳实践(XEP-0175):**在用户登录的时候给用户一个临时的账户允许用户登入服务。

**XMPP Ping(XEP-0199):**测试两个XMPP客户端或者终端和终端之间的连接情况。例如(A--->A’Server--->B’Server--->B)。

**延迟交付(XEP-0203):**给Tigase服务处理时间戳消息的能力。用于处理由于收件人脱机,导致的消息传递延迟。当接受者接收到消息的时候,可以看到消息的发送时间戳。

**XMPP-BOSH(XEP-0206):**服务器可以通过同步的HTTP(BOSH)双向流发送消息,如果一个XMPP客户端不能维持TCP的长连接,BOSH可以通过HTTP方式保持双向通信。

**服务器回拨(XEP-0220):**使用DNS来验证身份,服务器使用微弱的身份验证方法回拨,防止大多数情况下的地址诈骗。

**组件连接(XEP-0225):**本扩展允许XMPP服务器组件连接到TLS或者SASL服务器。同时允许多个主机绑定到一个连接!

**花名册版本(XEP-0237):**用户的花名册都存储在服务器上,在登录的时候下载花名册,消耗不必要的带宽,同时也减慢了登陆的速度。有了花名册版本,当花名册改变的时候一个花名册的版本号指派给客户端的花名册。在客户端保存一个花名册的缓存,在每次登陆的时候根据版本号拿本地缓存和服务器上的花名册比对,如果值不匹配,那么新的版本的花名册下载到客户端,如果相同,客户端就做简单的登陆,不需要下载花名册。

**PubSub集合节点(XEP-0248):**Tigase部分支持集合节点。一个采集几点充当其他节点的容器,它允许一个节点订阅整个集合,不允许只订阅其中的一节点。

**传递订阅(XEP-0253):**Tigase支持传递订阅。例如,如果节点A订阅了节点B,节点B订阅了节点C,那么如果客户端订阅节点A,那么将同时订阅节点B和节点C!

3、远程管理

Tigase提供多种协议用于自动远程监控服务器。对于关键服务的部署方案,能够主动实时对服务的早期问题检测非常重要。远程监控服务消耗服务器很少的资源就可以保持不间断的监控。

服务器监控工具包括以下两部分:

1、管理框架和API:提供一种方法供用户和监控系统的交互,提供两种模式:

1.1、自动:资源使用追踪,当突破预设水平的时候,自动通知管理员。

1.2、互动:该框架可以报告资源的使用情况或者根据改变阀值,回应管理员的手工命令。

2、资源管理:每个小而简单的插件,监视制定的资源。目前Tigase有四个资源监视器:

1、CPU:通过追踪CPU使用的百分比,以及活动进程的百分比。当当前利用的资源值高于阀值是发出通知。

2、内存:监控JVN堆和内存池,如果突破一定水准则发出通知

3、硬盘:跟踪磁盘分区的使用,检查磁盘空间。Tigase使用磁盘驱动器进行监控

4、日志:查看日志,把警告和错误等实时广播给管理员,但是需要消耗大量资源。

Tigase服务器提供一下服务器统计信息:

1、 主动客户端-客户端,客户端到服务器和BOSH的数量

2、 服务器负载每一个组件在最后一秒,分钟和小时的状态信息,中继消息,客户端到客户端,客户端到服务器,Http请求(BOSH),和MUC(群聊),PubSub(订阅)的消息数。

3、 服务器启动的时间,以及堆和栈的使用情况。

4、 已注册的用户,和当前在线用户的数量

Tigase远程管理协议:

1、 HTTP:由于缺乏安全机制,最好在安全网络上使用

2、 JMX/RMI:JAVA扩展用于监控和管理应用的设备和网络

3、 SNMP:一个IETF协议,用于管理网络设备,如交换机,路由器,服务器,打印机等。Tigase包含一个SNMP代理用于向安装有网路管理系统(NMS)软件报告服务器状态!

4、 Xmpp:可通过XMPPClient监控。