3. 关于 Tigase XMPP 服务器
Tigase XMPP 服务器* 是一个基于 Java的**开源和免费 (AGPLv3)** 的服务器 。其服务器设计和背后实施的目标是:
使服务器稳健可靠。
使服务器成为一个安全的交流平台。
做一个可以应用于不同场景的灵活的服务器。
做一个可以充分利用 XMPP 可扩展性协议的可扩展服务器。
使服务器易于设置和维护。
3.1. 稳固可靠
这意味着服务器可以同时处理许多请求/连接,并且可以长时间可靠运行。该服务器的设计和实现是为了同时处理数百万个连接。
然而,仅仅设计和实现一个高负载服务器并希望它良好运行是不够的。该项目的重点是投入测试。如此认真勤勉的测试以至于其已经拥有了一个专门的测试框架。所有服务器功能只有在通过严格的测试周期后才被视之为已实现。测试周期包括 3 个基本测试:
功能测试 - 检查功能是否有效。
性能测试 - 检查功能是否足够好。
稳定性测试 - 检查功能是否在长期运行中表现良好。它必须在服务器运行的几个小时内每秒处理数百个请求。
3.2. 安全
与 XMPP 服务器相关的安全性有几个要素:通过 SSL 或 TLS 协议实现的安全数据传输,通过 DIGEST* 实现的安全用户授权或通过 **SASL 用户授权和组件架构实现的安全部署。
安全部署* Tigase 软件安装不会影响网络安全。公司通常将其网络分为两部分:DMZ 部分对外界开放,私有网络 对外界关闭。
如果 XMPP 服务器要在公司员工之间提供一种有效的通信方式,那么无论他们是在安全的公司办公室还是在外部(可能在客户站点),它都需要接受内部和外部连接。所以服务器部署的自然位置是**DMZ**。但是,这种解决方案有一些顾虑:每个公司通常都建立了网络用户基础和集成的授权机制。但是,这些信息应该存储在 DMZ 之外以保护内部安全,那么如何保持安装的便利性和系统的安全性呢?
Tigase 服务器 为这种情况提供了解决方案。凭借其组件结构,Tigase 可以轻松部署在任意数量的机器上,并且从用户的角度来看,它被视为一个逻辑 XMPP 服务器。在这种情况下,我们可以在**私人** 网络中安装一个会话管理器模块,并在**DMZ** 中安装一个带有服务连接管理器的客户端连接管理器。
会话管理器连接到 DMZ 并接收来自外部用户的所有数据包。从而可以安全地实现基于公司授权机制的用户授权。
3.3. 灵活性
有许多不同 XMPP的 服务器实现。最流行的如下:
用于服务器负载不重的中小型公司的业务交流平台。对于此类部署,安全性是一个关键特性。
另一方面,对于大型社区网站或互联网门户服务器而言,通常其负载非常重,并且必须同时支持数千或数百万个连接。对于这样的部署,因为大多数服务都是对公众开放的,所以我们需要不同级别的安全性。
对于非常小的社区部署或小型家庭网络,关键因素是易于部署和维护。
基于组件的架构让服务器在不同机器上可以运行选定模块,因此其可以轻松应用于任何场景。
对于简单的安装,服务器会生成一个配置文件,此配置文件只需少许修改或根本不需要修改即可立即使用。但是,对于复杂的部署,您可以根据需要调整配置并在任意你需要数量的物理机器上设置 XMPP 服务器。
3.4. 可扩展性
世界一直在变化,用户的需求也在变化。被设计为可扩展的 XMPP 协议使其可以轻松添加新功能并使其满足不同用户的需求。因此,XMPP 是一个非常有效的平台,不仅可以用于向其他用户发送消息,还可以用于发送事件的即时通知,是在线客户服务,语音通话和当需要时可发送即时信息给他人的有用平台。
Tigase 服务器 设计为可使用模块化架构进行扩展。您可以轻松地将不符合您要求的组件替换成更适合您需求的其他组件。不仅如此,可扩展性的另一个因素是替换或添加新扩展非常容易。大量精力投入服务器设计 API ,以使其他软件开发人员可以轻松创建扩展并实现新功能。
3.5. 使用方便
由许多具有不同服务的服务器组成的复杂计算机网络很难维护。这就需要雇佣专业人员来操作和维护网络。
然而,并非所有网络都如此复杂,大多数小公司只需要几台服务器来满足他们的需求,比如电子邮件和 HTTP 服务器。他们可能希望将 XMPP 服务器添加到他们的服务集合中,但是并不想投入资源来专用于设置和维护。对于此类用户,我们的默认配置正是他们所需要的。如果服务器上的操作系统配置良好,那么 Tigase 应该会自动获取正确的主机名并准备好立即运行。
Tigase 服务器的设计和实现允许在运行时动态重新配置,因此每次您想要更改配置的设置时都无需重启服务器。
还有一些接口和处理程序可轻松用于实现由服务器来监视和配置 Web 用户界面。
3.6. XMPP 支持的扩展
基于 XEP-0387: XMPP Compliance Suites 2018
3.6.1. 核心合规套件
支持 |
规格 |
名称 |
评论 |
✓ |
可扩展消息传递和存在协议 (XMPP):核心 |
||
⍻ |
可扩展消息传递和存在协议 (XMPP):地址格式 |
我们支持旧版本的规范:RFC6122 |
|
✓ |
在可扩展消息传递和存在协议 (XMPP) 中使用传输层安全协定 (TLS) |
||
✓ |
XMPP在TLS 上的 SRV 记录 |
要求添加指向端口 5223 的 DNS 条目 |
|
✓ |
服务发现 |
||
✓ |
实体能力 |
||
✓ |
Jabber 组件协议 |
||
✓ |
个人事件协议 |
3.6.2. 网络合规套件
支持 |
规格 |
名称 |
评论 |
✓ |
WebSocket 的可扩展消息传递和存在协议 (XMPP) 子协议 |
||
✓ |
BOSH 上的 XMPP |
||
✓ |
同步 HTTP (BOSH)上的双向流 |
3.6.3. IM 合规套件
支持 |
规格 |
名称 |
评论 |
✓ |
可扩展消息传递和存在协议 (XMPP):即时消息传递和存在 |
||
✓ |
用户头像 |
||
✓ |
基于 vCard 的头像 |
||
✓ |
电子名片温度 |
||
✓ |
消息碳 |
||
✓ |
阻断命令 |
||
✓ |
多用户聊天 |
||
✓ |
直接 MUC 邀请 |
||
✓ |
书签 |
||
✓ |
通过 PubSub 持久存储私有数据 |
||
✓ |
私人XML 存储 |
||
✓ |
流管理 |
|
|
✓ |
消息归档管理 |
3.6.4. 移动合规套件
支持 |
规格 |
名称 |
评论 |
✓ |
WebSocket 的可扩展消息传递和存在协议 (XMPP) 子协议 |
||
✓ |
流管理 |
|
|
✓ |
客户端状态指示 |
||
✓ |
推送通知 |
3.6.5. 不合规套件扩展
支持 |
规格 |
名称 |
评论 |
✓ |
数据表单 |
||
✓ |
基于 IQ 的头像 |
||
✓ |
最后的活动 |
||
✓ |
灵活的离线消息检索 |
||
✓ |
隐私列表 |
||
✓ |
功能协商 |
||
✓ |
消息事件 |
||
✓ |
带内字节流 |
||
✓ |
临时命令 |
||
✓ |
结果集管理 |
||
✓ |
发布-订阅 |
||
✓ |
SOCKS5 字节流 |
||
✓ |
带外数据 |
||
✓ |
数据表单的字段标准化 |
||
✓ |
XHTML-IM |
||
✓ |
XMPP 上的 SOAP |
||
✓ |
带内注册 |
||
✓ |
非 SASL 身份验证 |
||
✓ |
高级消息处理 |
||
✓ |
用户位置 |
||
✓ |
XMPP 日期和时序 |
||
✓ |
嵌套名册组 |
||
✓ |
聊天状态通知 |
||
✓ |
错误条件映射 |
||
✓ |
旧版延迟交付 |
||
✓ |
软件版本 |
||
✓ |
文件传输 |
||
✓ |
网关交互 |
||
✓ |
JID 逃逸 |
||
✓ |
用户心情 |
通过``Personal Eventing Protocol (XEP-0163)``支持服务器 |
|
✓ |
用户活动 |
通过``Personal Eventing Protocol (XEP-0163)``支持服务器 |
|
✓ |
用户调谐 |
通过``Personal Eventing Protocol (XEP-0163)``支持服务器 |
|
✓ |
XMPP 上的通用警报协议 (CAP) |
||
✓ |
服务发现扩展 |
||
✓ |
节标题和 Internet 元数据 (SHIM) |
||
✓ |
服务管理 |
||
✓ |
消息归档 |
||
✓ |
数据表单布局 |
||
✓ [1] |
工作组队列 |
||
✓ |
名册项目交换 |
||
✓ |
注释 |
||
✓ |
远程控制客户端 |
||
✓ |
可达地址 |
||
✓ |
节会话协商 |
||
✓ |
发现可替代 的XMPP 连接方法 |
使用 DNS 记录,这样其可以与 Tigase XMPP 服务器一起使用 |
|
✓ |
XMPP 服务的联系地址 |
||
✓ |
处理离线消息的最佳实践 |
||
✓ |
Jingle |
||
✓ |
Jingle RTP 会话 |
||
✓ |
流特征协商的推荐顺序 |
||
✓ |
语言翻译 |
||
✓ |
用户昵称 |
||
✓ |
无服务器消息传递 |
||
✓ |
使用 SASL ANONYMOUS 的最佳实践 |
||
✓ |
Jingle ICE-UDP 传输方法 |
||
✓ |
Jingle 原始 UDP 传输方法 |
||
✓ |
使用带有证书的 SASL EXTERNAL 的最佳实践 |
||
✓ |
Jingle IAX传输方式 |
||
✓ |
通过RTP的Jingle 视频 |
||
✓ |
Jingle DTMF |
||
✓ |
消息回执 |
||
✓ |
回拨密钥生成和验证 |
||
✓ |
关闭空闲流的最佳实践 |
||
✓ |
XMPP Ping |
||
✓ |
消息线程的最佳实践 |
||
✓ |
实体时间 |
||
✓ |
延迟交付 |
||
✓ |
阻止阻断服务攻击的最佳实践 |
||
✓ |
元联系人 |
||
✓ |
服务器回拨 |
||
✓ |
注意 |
||
✓ |
组件连接 |
||
✓ |
消息节配置 |
||
✓ |
二进制位 |
||
✓ |
Jingle 文件传输 |
||
✓ |
/me 命令 |
||
✓ |
端到端 XML 流 |
||
✓ |
Jingle XML 流 |
||
✓ |
使用 TLS 的 C2C 身份验证 |
||
✓ |
Jingle 会话转移 |
||
✓ |
Jingle SOCKS5 字节流传输方法 |
||
✓ |
Jingle 带内字节流传输 |
||
✓ |
在 Jingle RTP 会话中使用 ZRTP |
||
✓ |
XMPP 上的微博 |
||
✓ |
XMPP 上的 vCard4 |
||
✓ |
带内实时文本 |
||
✓ |
XMPP 快速入门 |
||
✓ |
物联网 - 传感器数据 |
||
✓ |
物联网 - 开通 |
||
✓ |
物联网 - 控制 |
||
✓ |
物联网 - 集中器 |
||
✓ |
聊天标记 |
||
✓ |
HTTP 文件上传 |
||
✓ |
XMPP 合规性套件 2018 |
3.6.6. 支持的 RFC 和 XEP 的完整有序列表:
支持 |
规格 |
名称 |
评论 |
✓ |
可扩展消息传递和存在协议 (XMPP):核心 |
||
✓ |
可扩展消息传递和存在协议 (XMPP):即时消息传递和存在 |
||
⍻ |
可扩展消息传递和存在协议 (XMPP):地址格式 |
我们支持旧版本的规范:RFC6122 |
|
✓ |
WebSocket 的可扩展消息传递和存在协议 (XMPP) 子协议 |
||
✓ |
WebSocket 的可扩展消息传递和存在协议 (XMPP) 子协议 |
||
✓ |
在可扩展消息传递和存在协议 (XMPP) 中使用传输层安全协定 (TLS) |
||
✓ |
数据表单 |
||
✓ |
基于 IQ 的头像 |
||
✓ |
最后的活动 |
||
✓ |
灵活的离线消息检索 |
||
✓ |
隐私列表 |
||
✓ |
功能协商 |
||
✓ |
消息事件 |
||
✓ |
服务发现 |
||
✓ |
多用户聊天 |
||
✓ |
带内字节流 |
||
✓ |
书签 |
||
✓ |
私人XML 存储 |
||
✓ |
临时命令 |
||
✓ |
电子名片温度 |
||
✓ |
结果集管理 |
||
✓ |
发布-订阅 |
||
✓ |
SOCKS5 字节流 |
||
✓ |
带外数据 |
||
✓ |
数据表单的字段标准化 |
||
✓ |
XHTML-IM |
||
✓ |
XMPP 上的 SOAP |
||
✓ |
带内注册 |
||
✓ |
非 SASL 身份验证 |
||
✓ |
高级消息处理 |
||
✓ |
用户位置 |
||
✓ |
XMPP 日期和时序 |
||
✓ |
嵌套名册组 |
||
✓ |
用户头像 |
||
✓ |
聊天状态通知 |
||
✓ |
错误条件映射 |
||
✓ |
旧版延迟交付 |
||
✓ |
软件版本 |
||
✓ |
文件传输 |
||
✓ |
网关交互 |
||
✓ |
JID 逃逸 |
||
✓ |
用户心情 |
通过``Personal Eventing Protocol (XEP-0163)``支持服务器 |
|
✓ |
用户活动 |
通过``Personal Eventing Protocol (XEP-0163)``支持服务器 |
|
✓ |
Jabber 组件协议 |
||
✓ |
实体能力 |
||
✓ |
用户调谐 |
通过``Personal Eventing Protocol (XEP-0163)``支持服务器 |
|
✓ |
同步 HTTP (BOSH)上的双向流 |
||
✓ |
服务发现扩展 |
||
✓ |
XMPP 上的通用警报协议 (CAP) |
||
✓ |
节标题和 Internet 元数据 (SHIM) |
||
✓ |
服务管理 |
||
✓ |
消息归档 |
||
✓ |
数据表单布局 |
||
✓ |
工作组队列 |
||
✓ |
名册项目交换 |
||
✓ |
注释 |
||
✓ |
远程控制客户端 |
||
✓ |
可达地址 |
||
✓ |
基于 vCard 的头像 |
||
✓ |
节会话协商 |
||
✓ |
发现可替代 的XMPP 连接方法 |
使用 DNS 记录,这样其可以与 Tigase XMPP 服务器一起使用 |
|
✓ |
XMPP 服务的联系地址 |
||
✓ |
处理离线消息的最佳实践 |
||
✓ |
个人事件协议 |
||
✓ |
Jingle |
||
✓ |
Jingle RTP 会话 |
||
✓ |
流特征协商的推荐顺序 |
||
✓ |
语言翻译 |
||
✓ |
用户昵称 |
||
✓ |
无服务器消息传递 |
||
✓ |
使用 SASL ANONYMOUS 的最佳实践 |
||
✓ |
Jingle ICE-UDP 传输方法 |
||
✓ |
Jingle 原始 UDP 传输方法 |
||
✓ |
使用带有证书的 SASL EXTERNAL 的最佳实践 |
||
✓ |
Jingle IAX传输方式 |
||
✓ |
通过RTP的Jingle 视频 |
||
✓ |
Jingle DTMF |
||
✓ |
消息回执 |
||
✓ |
回拨密钥生成和验证 |
||
✓ |
关闭空闲流的最佳实践 |
||
✓ |
阻断命令 |
||
✓ |
流管理 |
|
|
✓ |
XMPP Ping |
||
✓ |
消息线程的最佳实践 |
||
✓ |
实体时间 |
||
✓ |
延迟交付 |
||
✓ |
阻止阻断服务攻击的最佳实践 |
||
✓ |
BOSH 上的 XMPP |
||
✓ |
元联系人 |
||
✓ |
服务器回拨 |
||
✓ |
通过 PubSub 持久存储私有数据 |
||
✓ |
注意 |
||
✓ |
组件连接 |
||
✓ |
消息节配置 |
||
✓ |
二进制位 |
||
✓ |
Jingle 文件传输 |
||
✓ |
/me 命令 |
||
✓ |
端到端 XML 流 |
||
✓ |
Jingle XML 流 |
||
✓ |
直接 MUC 邀请 |
||
✓ |
使用 TLS 的 C2C 身份验证 |
||
✓ |
Jingle 会话转移 |
||
✓ |
Jingle SOCKS5 字节流传输方法 |
||
✓ |
Jingle 带内字节流传输 |
||
✓ |
在 Jingle RTP 会话中使用 ZRTP |
||
✓ |
XMPP 上的微博 |
||
✓ |
消息碳 |
||
✓ |
XMPP 上的 vCard4 |
||
✓ |
带内实时文本 |
||
✓ |
XMPP 快速入门 |
||
✓ |
消息归档管理 |
||
✓ |
物联网 - 传感器数据 |
||
✓ |
物联网 - 开通 |
||
✓ |
物联网 - 控制 |
||
✓ |
物联网 - 集中器 |
||
✓ |
聊天标记 |
||
✓ |
客户端状态指示 |
||
✓ |
推送通知 |
||
✓ |
HTTP 文件上传 |
||
✓ |
XMPP在TLS 上的 SRV 记录 |
要求添加指向端口 5223 的 DNS 条目 |
|
✓ |
XMPP 合规性套件 2018 |
3.7. Tigase 自定义扩展
3.7.1. 综合特征
支持 |
名称 |
评论 |
✓ [2] |
审计日志 |
能够记录系统中的重要事件(登录,消息交换,呼叫) |
✓ |
反滥用 |
打击stanza SPAM、DoS、暴力攻击和其他威胁 |
✓ |
虚拟域 |
能够从单个实例创建和管理多个虚拟域并且无需重新启动管理 |
✓ |
MUC订阅离线推送 |
可选择永久注册到房间以接收新消息的推送通知。 |
✓ |
脚本 API |
支持 Java 脚本 API JSR-223 |
✓ |
JMX 监控 |
通过 JMX 协议来连接自定义监视器的 API 和连接通用 JMX 工具的 TCP/IP 端点对服务器进行高级监控 |
✓ |
HTTP 监控 |
通过 HTTP 协议进行基本监控 |
✓ |
XMPP 监控 |
通过 XMPP 进行插入式的主动监控,来检索详细的服务器统计信息,并接收通过自我监控机制所发现的可能问题的自动通知 |
✓ |
SNMP 监控 |
通过 SNMP 进行高级服务器监控。 |
✓ |
Bosh缓存 |
Bosh 会话缓存 - 一种快速重新加载用户数据的功能 - 网络 客户端(例如在网页重新加载后)的名册,出现和消息历史记录 |
✓ |
集群 |
对 HA 和 LB 的完整集群支持,具有插入式集群策略,从而可完美优化集群到客户端系统 |
✓ |
高级聚群策略 |
专用和专门的集群策略以获得最佳性能 |
✓ |
MUC 集群 |
支持具有各种插入式策略的集群群组聊天室 |
✓ |
PubSub 集群 |
支持使用各种插入式策略对 PubSub 组件进行集群 |
✓ |
移动优化 |
对移动设备的优化设计 |
✓ |
OSGi |
支持在 OSGi 环境中运行,即作为高级应用服务器中的嵌入式 XMPP 服务器 |
✓ |
动态名册 |
能够根据从任何来源检索到的数据即时创建用户名册条目 |
✓ |
命令行管理工具 |
用于管理服务器的命令行工具 |
✓ |
统一档案 |
XEP-0313 消息存档管理的扩展,在可以存档的内容方面极大提高了灵活性。 |
3.7.2. 存储库/数据库
支持 |
名称 |
评论 |
✓ |
每个域的数据库 |
特定域可拥有多个数据库。 |
✓ |
PostgreSQL |
完全支持除PubSub 组件的专用数据库模式之外的具有数据库模式的 PostgreSQL 数据库 |
✓ |
MySQL |
完全支持带有数据库模式的 MySQL 数据库,PubSub 组件的专用数据库模式 |
✓ |
SQL 服务器 |
完全支持除PubSub 组件的专用数据库架构以外的具有数据库架构的 MS SQL Server 数据库,这些仅存在于Tigase 服务器版本 3.x 中 |
✓ |
Derby 数据库 |
完全支持除PubSub 组件的专用数据库架构以外的具有数据库架构的内置 Derby 数据库 |
✓ |
JDBC |
支持所有启用 JDBC 的数据库,尽管数据库模式只可用于某些数据库 |
✓ |
Drupal 身份验证 |
Drupal 身份验证 - Tigase 服务器可以与 Drupal CMS 共享用户身份验证数据库,并可再次对 Drupal 用户数据库进行身份验证 |
✓ |
Drupal 身份验证 |
与 Drupal CMS 紧密集成,Tigase 可以向订阅用户发送相关新帖子,评论的通知,还可以通过 XMPP 发布短消息 |
✓ |
LDAP认证 |
支持 LDAP 身份验证连接器 |
要求商业许可证