#mqtt #broker #server

nightly bin+lib rqtt

一个专注于异步、零拷贝和安全性的 MQTT 服务器

1 个不稳定版本

0.1.0 2020 年 1 月 7 日

#63 in #broker

MIT 许可证

43KB

RQTT

一个基于 Rust 的 MQTT 服务器,专注于以下方面:

  • 使用 Rust 中的新 async/await 语法进行异步扩展
  • 使用异步缓冲读取进行零拷贝解析

动机


随着世界对实际设备所需的低延迟高吞吐量连接的需求每天都在增长。MQTT最初是一个用于工业机械与众多管理和调节服务器通信的协议,但很快发展成为一个不仅被大多数物联网设备使用,而且还被主流消息应用程序使用的协议。对于这个流行的协议的强大版本的需求是明显的,还有什么语言比那种声称是能够经受时间考验的软件的语言更适合编写它呢。本项目旨在为这些日常生活中微小但重要的通信创建一个安全、可扩展和强大的服务器。

本项目还旨在包含尽可能少的第三方库,并实现无标准兼容性,因为许多 rqtt 实例将在没有操作系统的设备上运行。

RQTT 在 Pipeline 生态系统中的位置

MQTT 是 [Pipeline] 分布式版本控制平台中使用的协议层。RQTT 被创建为一个健壮且可扩展的消息服务器,用于“pipe”版本控制协议,该协议通过 MQTT 消息进行通信。选择 Rust 作为 rqtt 的语言,不仅因为其安全保证,还因为 Pipeline 版本控制规范的其他部分也是用 Rust 实现的。这允许 Pipeline 被编译为一个程序,一个运行时管理所有异步线程。它还允许 Pipeline 在浏览器中的版本编译为一个小的 WebAssembly 包,包括 rqtt 客户端。

开发方法

rqtt 尽可能在可能的情况下遵循 MQTT 指南,在 MQTT 5.0 规范不明确的情况下遵循 Rust 代码最佳实践。MQTT 5.0 的指南指定在这里:https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901000

时间线

有关已实现和未实现的更详细列表,请参阅此 问题

进度

  • 1.0 数据表示 - 2019 年 9 月 1 日
  • 2.0 控制包格式解析 - 2019 年 9 月 16 日
  • 原因代码
  • 有效载荷规范和属性
  • 3.0 MQTT 控制包处理 - 2019 年 10 月 1 日
  • 核心路由功能
  • 发布/接收
  • 订阅/取消订阅频道
  • ping/响应处理
  • 4.0 运行行为 - 2019 年 10 月 15 日
  • 会话状态管理
  • 保存未交付的消息
  • 服务质量级别
  • 主题名称/主题过滤器
  • 5.0 安全性 - 2019 年 10 月 29 日
  • 通过第三方公司进行授权
  • 6.0 确保与 websockets 兼容 - 2019 年 11 月 12 日
  • 为每个浏览器添加 GitHub 中的测试工具
  • 7.0 审计和其他兼容性 - 尚未确定 - 我们将看看这实际上需要多少编码

RQTT 和 rumqttd

在不久的将来,rqtt 不太可能取代 rumqttd。rqtt 是 rumqttd 的一个兄弟项目,它致力于采用 async/await 以及其他可能最终迁移到 rumqttd 的优化技术。目前,如果您正在寻找一个稳定的 MQTT 服务器,并且没有时间等待 async/await 稳定下来,那么您应该考虑使用 rumqttd

基准和目标

由于 rqtt 是 rumqttd 的一个兄弟项目,它专注于通过更大的异步集成来实现可伸缩性,因此 rqtt 在基准测试中试图比 rumqttd 表现得更好是有意义的。在这个领域的成功将是在这个基准测试中也会使用的 rumqttd 实现的更低的平均服务时间。

订阅一个通配符主题并向本地机器上的代理发布 100 万个 qos1 消息(并等待确认)

服务器 发布包处理时间 平均内存使用量(字节) 接收发布包的总时间
mosquitto(1.4.11) 3m41.531635728s 2,417,095,749 3m42.242271385s
rumqttd 3m35.521259143s 2,318,325,979 3m36.247010478s
emqttd(2.1.2) 5m21.976169243s 2,469,802,635 5m27.802035293s
rqtt X X X

依赖项

~31–45MB
~804K SLoC