如何使用 MQTT 实现 whatsapp 类型的信使?
How to I implement whatsapp type messenger using MQTT?
我想使用 MQTT 协议实现一个类似于 whatsapp 的信使。
我应该阅读哪些教程?
我对几件事感到困惑:
- 我应该如何实现消息传递的主题结构? (目前我正在使用/domainname/phonenumber/(如果phone A whats to send message to phone B, it will publish a message to /domainname/B/)
- 如果客户端 B 离线并在一段时间后上线,客户端离线时如何接收发送给他的消息(主题 /domainname/B/)?
- 如何实现 sent/delivered/read 确认?
我知道这些都是非常基本的问题,但不幸的是我找不到任何指导初始步骤的资源。
结论:
在与已经在 MQTT 中实现大规模 Messenger 部署的人交谈后,我得出结论,MQTT 应该只是作为一种协议使用。 Pub/Sub 适合入门,但您应该有一层自己的业务逻辑以提高灵活性和性能。然而,您可以使用 pub/sub 树来实现大部分基本的 Messenger 需求,但是您将受限于它并且以后很难扩展。
- 主题结构看起来不错,但可能应该有一个 ACL,所以
客户端只能订阅自己的主题。
- 只要您不将 "cleansession" 选项设置为 true,那么代理应该存储和转发发送到客户端在断开连接之前订阅的主题的任何消息
- MQTT 不支持 Sent/delivered/read 通知,您需要自己实现,最简单的方法是每个客户端有 2 个主题,一个用于接收消息,一个用于接收通知。每条消息都应有一个 ID 号,可用于发送回原始发件人的通知
我已经通过 React Native 客户端实现了基本的 mqtt
功能,它能够 send/receives 消息使用标准的 mqtt 服务器,并且所有代码都已集成到 rnset 项目中,这是一个 github 反应本机项目。
您可以从 here .
查看
在 运行 rnset
之后,您可以查看来自 rnset->功能(demos)->MQTTChat
的演示
rnset/qmtt/mqttbox;
事实上rnset/mqtt demo在我的iphon7p上是运行 4G,mqttbox是运行在我的Mac上,可以同时收到消息
UI IPhone/Mac:
我想使用 MQTT 协议实现一个类似于 whatsapp 的信使。 我应该阅读哪些教程?
我对几件事感到困惑:
- 我应该如何实现消息传递的主题结构? (目前我正在使用/domainname/phonenumber/(如果phone A whats to send message to phone B, it will publish a message to /domainname/B/)
- 如果客户端 B 离线并在一段时间后上线,客户端离线时如何接收发送给他的消息(主题 /domainname/B/)?
- 如何实现 sent/delivered/read 确认?
我知道这些都是非常基本的问题,但不幸的是我找不到任何指导初始步骤的资源。
结论:
在与已经在 MQTT 中实现大规模 Messenger 部署的人交谈后,我得出结论,MQTT 应该只是作为一种协议使用。 Pub/Sub 适合入门,但您应该有一层自己的业务逻辑以提高灵活性和性能。然而,您可以使用 pub/sub 树来实现大部分基本的 Messenger 需求,但是您将受限于它并且以后很难扩展。
- 主题结构看起来不错,但可能应该有一个 ACL,所以 客户端只能订阅自己的主题。
- 只要您不将 "cleansession" 选项设置为 true,那么代理应该存储和转发发送到客户端在断开连接之前订阅的主题的任何消息
- MQTT 不支持 Sent/delivered/read 通知,您需要自己实现,最简单的方法是每个客户端有 2 个主题,一个用于接收消息,一个用于接收通知。每条消息都应有一个 ID 号,可用于发送回原始发件人的通知
我已经通过 React Native 客户端实现了基本的 mqtt
功能,它能够 send/receives 消息使用标准的 mqtt 服务器,并且所有代码都已集成到 rnset 项目中,这是一个 github 反应本机项目。
您可以从 here .
查看
在 运行 rnset
之后,您可以查看来自 rnset->功能(demos)->MQTTChat
rnset/qmtt/mqttbox; 事实上rnset/mqtt demo在我的iphon7p上是运行 4G,mqttbox是运行在我的Mac上,可以同时收到消息
UI IPhone/Mac: