3. 关于 Tigase XMPP 服务器

Tigase XMPP 服务器* 是一个基于 Java的**开源和免费 (AGPLv3)** 的服务器 。其服务器设计和背后实施的目标是:

  1. 使服务器稳健可靠。

  2. 使服务器成为一个安全的交流平台。

  3. 做一个可以应用于不同场景的灵活的服务器。

  4. 做一个可以充分利用 XMPP 可扩展性协议的可扩展服务器。

  5. 使服务器易于设置和维护。

3.1. 稳固可靠

这意味着服务器可以同时处理许多请求/连接,并且可以长时间可靠运行。该服务器的设计和实现是为了同时处理数百万个连接。

然而,仅仅设计和实现一个高负载服务器并希望它良好运行是不够的。该项目的重点是投入测试。如此认真勤勉的测试以至于其已经拥有了一个专门的测试框架。所有服务器功能只有在通过严格的测试周期后才被视之为已实现。测试周期包括 3 个基本测试:

  1. 功能测试 - 检查功能是否有效。

  2. 性能测试 - 检查功能是否足够好。

  3. 稳定性测试 - 检查功能是否在长期运行中表现良好。它必须在服务器运行的几个小时内每秒处理数百个请求。

3.2. 安全

与 XMPP 服务器相关的安全性有几个要素:通过 SSLTLS 协议实现的安全数据传输,通过 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. 核心合规套件

Table 1.核心合规套件

支持

规格

名称

评论

RFC6120

可扩展消息传递和存在协议 (XMPP):核心

RFC7622

可扩展消息传递和存在协议 (XMPP):地址格式

我们支持旧版本的规范:RFC6122

RFC7590

在可扩展消息传递和存在协议 (XMPP) 中使用传输层安全协定 (TLS)

XEP-0368

XMPP在TLS 上的 SRV 记录

要求添加指向端口 5223 的 DNS 条目

XEP-0030

服务发现

XEP-0115

实体能力

XEP-0114

Jabber 组件协议

XEP-0163

个人事件协议

3.6.2. 网络合规套件

Table 2.网络合规套件

支持

规格

名称

评论

RFC7395

WebSocket 的可扩展消息传递和存在协议 (XMPP) 子协议

XEP-0206

BOSH 上的 XMPP

XEP-0124

同步 HTTP (BOSH)上的双向流

3.6.3. IM 合规套件

Table 3.网络合规套件

支持

规格

名称

评论

RFC6120

可扩展消息传递和存在协议 (XMPP):即时消息传递和存在

XEP-0084

用户头像

XEP-0153

基于 vCard 的头像

XEP-0054

电子名片温度

XEP-0280

消息碳

XEP-0191

阻断命令

XEP-0045

多用户聊天

XEP-0249

直接 MUC 邀请

XEP-0048

书签

XEP-0223

通过 PubSub 持久存储私有数据

XEP-0049

私人XML 存储

XEP-0198

流管理

Session Resumption 和``Stanza Acknowledgements``

XEP-0313

消息归档管理

3.6.4. 移动合规套件

Table 4.网络合规套件

支持

规格

名称

评论

RFC7395

WebSocket 的可扩展消息传递和存在协议 (XMPP) 子协议

XEP-0198

流管理

Session Resumption 和``Stanza Acknowledgements``

XEP-0352

客户端状态指示

XEP-0357

推送通知

3.6.5. 不合规套件扩展

Table 5.核心合规套件

支持

规格

名称

评论

XEP-0004

数据表单

XEP-0008

基于 IQ 的头像

XEP-0012

最后的活动

XEP-0013

灵活的离线消息检索

XEP-0016

隐私列表

XEP-0020

功能协商

XEP-0022

消息事件

XEP-0047

带内字节流

XEP-0050

临时命令

XEP-0059

结果集管理

XEP-0060

发布-订阅

XEP-0065

SOCKS5 字节流

XEP-0066

带外数据

XEP-0068

数据表单的字段标准化

XEP-0071

XHTML-IM

XEP-0072

XMPP 上的 SOAP

XEP-0077

带内注册

XEP-0078

非 SASL 身份验证

XEP-0079

高级消息处理

XEP-0080

用户位置

XEP-0082

XMPP 日期和时序

XEP-0083

嵌套名册组

XEP-0085

聊天状态通知

XEP-0086

错误条件映射

XEP-0091

旧版延迟交付

XEP-0092

软件版本

XEP-0096

文件传输

XEP-0100

网关交互

XEP-0106

JID 逃逸

XEP-0107

用户心情

通过``Personal Eventing Protocol (XEP-0163)``支持服务器

XEP-0108

用户活动

通过``Personal Eventing Protocol (XEP-0163)``支持服务器

XEP-0118

用户调谐

通过``Personal Eventing Protocol (XEP-0163)``支持服务器

XEP-0127

XMPP 上的通用警报协议 (CAP)

XEP-0128

服务发现扩展

XEP-0131

节标题和 Internet 元数据 (SHIM)

XEP-0133

服务管理

XEP-0136

消息归档

XEP-0141

数据表单布局

[1]

XEP-0142

工作组队列

XEP-0144

名册项目交换

XEP-0145

注释

XEP-0146

远程控制客户端

XEP-0152

可达地址

XEP-0155

节会话协商

XEP-0156

发现可替代 的XMPP 连接方法

使用 DNS 记录,这样其可以与 Tigase XMPP 服务器一起使用

XEP-0157

XMPP 服务的联系地址

XEP-0160

处理离线消息的最佳实践

XEP-0166

Jingle

XEP-0167

Jingle RTP 会话

XEP-0170

流特征协商的推荐顺序

XEP-0171

语言翻译

XEP-0172

用户昵称

XEP-0174

无服务器消息传递

XEP-0175

使用 SASL ANONYMOUS 的最佳实践

XEP-0176

Jingle ICE-UDP 传输方法

XEP-0177

Jingle 原始 UDP 传输方法

XEP-0178

使用带有证书的 SASL EXTERNAL 的最佳实践

XEP-0179

Jingle IAX传输方式

XEP-0180

通过RTP的Jingle 视频

XEP-0181

Jingle DTMF

XEP-0184

消息回执

XEP-0185

回拨密钥生成和验证

XEP-0190

关闭空闲流的最佳实践

XEP-0199

XMPP Ping

XEP-0201

消息线程的最佳实践

XEP-0202

实体时间

XEP-0203

延迟交付

XEP-0205

阻止阻断服务攻击的最佳实践

XEP-0209

元联系人

XEP-0220

服务器回拨

XEP-0224

注意

XEP-0225

组件连接

XEP-0226

消息节配置

XEP-0231

二进制位

XEP-0234

Jingle 文件传输

XEP-0245

/me 命令

XEP-0246

端到端 XML 流

XEP-0247

Jingle XML 流

XEP-0250

使用 TLS 的 C2C 身份验证

XEP-0251

Jingle 会话转移

XEP-0260

Jingle SOCKS5 字节流传输方法

XEP-0261

Jingle 带内字节流传输

XEP-0262

在 Jingle RTP 会话中使用 ZRTP

XEP-0277

XMPP 上的微博

XEP-0292

XMPP 上的 vCard4

XEP-0301

带内实时文本

XEP-0305

XMPP 快速入门

XEP-0323

物联网 - 传感器数据

XEP-0324

物联网 - 开通

XEP-0325

物联网 - 控制

XEP-0326

物联网 - 集中器

XEP-0333

聊天标记

XEP-0363

HTTP 文件上传

XEP-0387

XMPP 合规性套件 2018

3.6.6. 支持的 RFC 和 XEP 的完整有序列表:

支持

规格

名称

评论

RFC6120

可扩展消息传递和存在协议 (XMPP):核心

RFC6120

可扩展消息传递和存在协议 (XMPP):即时消息传递和存在

RFC7622

可扩展消息传递和存在协议 (XMPP):地址格式

我们支持旧版本的规范:RFC6122

RFC7395

WebSocket 的可扩展消息传递和存在协议 (XMPP) 子协议

RFC7395

WebSocket 的可扩展消息传递和存在协议 (XMPP) 子协议

RFC7590

在可扩展消息传递和存在协议 (XMPP) 中使用传输层安全协定 (TLS)

XEP-0004

数据表单

XEP-0008

基于 IQ 的头像

XEP-0012

最后的活动

XEP-0013

灵活的离线消息检索

XEP-0016

隐私列表

XEP-0020

功能协商

XEP-0022

消息事件

XEP-0030

服务发现

XEP-0045

多用户聊天

XEP-0047

带内字节流

XEP-0048

书签

XEP-0049

私人XML 存储

XEP-0050

临时命令

XEP-0054

电子名片温度

XEP-0059

结果集管理

XEP-0060

发布-订阅

XEP-0065

SOCKS5 字节流

XEP-0066

带外数据

XEP-0068

数据表单的字段标准化

XEP-0071

XHTML-IM

XEP-0072

XMPP 上的 SOAP

XEP-0077

带内注册

XEP-0078

非 SASL 身份验证

XEP-0079

高级消息处理

XEP-0080

用户位置

XEP-0082

XMPP 日期和时序

XEP-0083

嵌套名册组

XEP-0084

用户头像

XEP-0085

聊天状态通知

XEP-0086

错误条件映射

XEP-0091

旧版延迟交付

XEP-0092

软件版本

XEP-0096

文件传输

XEP-0100

网关交互

XEP-0106

JID 逃逸

XEP-0107

用户心情

通过``Personal Eventing Protocol (XEP-0163)``支持服务器

XEP-0108

用户活动

通过``Personal Eventing Protocol (XEP-0163)``支持服务器

XEP-0114

Jabber 组件协议

XEP-0115

实体能力

XEP-0118

用户调谐

通过``Personal Eventing Protocol (XEP-0163)``支持服务器

XEP-0124

同步 HTTP (BOSH)上的双向流

XEP-0128

服务发现扩展

XEP-0127

XMPP 上的通用警报协议 (CAP)

XEP-0131

节标题和 Internet 元数据 (SHIM)

XEP-0133

服务管理

XEP-0136

消息归档

XEP-0141

数据表单布局

XEP-0142

工作组队列

XEP-0144

名册项目交换

XEP-0145

注释

XEP-0146

远程控制客户端

XEP-0152

可达地址

XEP-0153

基于 vCard 的头像

XEP-0155

节会话协商

XEP-0156

发现可替代 的XMPP 连接方法

使用 DNS 记录,这样其可以与 Tigase XMPP 服务器一起使用

XEP-0157

XMPP 服务的联系地址

XEP-0160

处理离线消息的最佳实践

XEP-0163

个人事件协议

XEP-0166

Jingle

XEP-0167

Jingle RTP 会话

XEP-0170

流特征协商的推荐顺序

XEP-0171

语言翻译

XEP-0172

用户昵称

XEP-0174

无服务器消息传递

XEP-0175

使用 SASL ANONYMOUS 的最佳实践

XEP-0176

Jingle ICE-UDP 传输方法

XEP-0177

Jingle 原始 UDP 传输方法

XEP-0178

使用带有证书的 SASL EXTERNAL 的最佳实践

XEP-0179

Jingle IAX传输方式

XEP-0180

通过RTP的Jingle 视频

XEP-0181

Jingle DTMF

XEP-0184

消息回执

XEP-0185

回拨密钥生成和验证

XEP-0190

关闭空闲流的最佳实践

XEP-0191

阻断命令

XEP-0198

流管理

Session Resumption 和``Stanza Acknowledgements``

XEP-0199

XMPP Ping

XEP-0201

消息线程的最佳实践

XEP-0202

实体时间

XEP-0203

延迟交付

XEP-0205

阻止阻断服务攻击的最佳实践

XEP-0206

BOSH 上的 XMPP

XEP-0209

元联系人

XEP-0220

服务器回拨

XEP-0223

通过 PubSub 持久存储私有数据

XEP-0224

注意

XEP-0225

组件连接

XEP-0226

消息节配置

XEP-0231

二进制位

XEP-0234

Jingle 文件传输

XEP-0245

/me 命令

XEP-0246

端到端 XML 流

XEP-0247

Jingle XML 流

XEP-0249

直接 MUC 邀请

XEP-0250

使用 TLS 的 C2C 身份验证

XEP-0251

Jingle 会话转移

XEP-0260

Jingle SOCKS5 字节流传输方法

XEP-0261

Jingle 带内字节流传输

XEP-0262

在 Jingle RTP 会话中使用 ZRTP

XEP-0277

XMPP 上的微博

XEP-0280

消息碳

XEP-0292

XMPP 上的 vCard4

XEP-0301

带内实时文本

XEP-0305

XMPP 快速入门

XEP-0313

消息归档管理

XEP-0323

物联网 - 传感器数据

XEP-0324

物联网 - 开通

XEP-0325

物联网 - 控制

XEP-0326

物联网 - 集中器

XEP-0333

聊天标记

XEP-0352

客户端状态指示

XEP-0357

推送通知

XEP-0363

HTTP 文件上传

XEP-0368

XMPP在TLS 上的 SRV 记录

要求添加指向端口 5223 的 DNS 条目

XEP-0387

XMPP 合规性套件 2018

3.7. Tigase 自定义扩展

3.7.1. 综合特征

tabel 6.监控

支持

名称

评论

[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. 存储库/数据库

Table 7.存储库/数据库

支持

名称

评论

每个域的数据库

特定域可拥有多个数据库。

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 身份验证连接器