Tigase 概述
译:http://xmppwithtigase.org/tigaseoverview.html#reasons
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监控。