用户上线时的 Mqtt 消息传递

Mqtt message delivery when user will come online

是否可以使用 mqtt+mosquitto(或任何代理,如 rabbitmq、redis)代替 FCM 来推送通知?

假设我们使用的是 mqtt+mosquitto。

我正在解释我需要的场景:

用户 A 正在向用户 B 发送消息,但用户 B现在离线。每当用户 B 上线时,他应该收到关于他的未决消息的通知。

如何使用 broker 实现这个场景

MQTT有一个"persistent sessions"的概念。有一个名为 "clean session" 的标志,客户端在第一次连接时在连接数据包中发送给代理。通过将此标志设置为 false,客户要求经纪人 "remember me".

然后,如果客户端断开连接或失去连接,代理将为客户端保留消息,直到下次重新连接时,并按收到的顺序将它们发送给客户端。

在 MQTT 中,每个客户端都需要有一个唯一的 "ClientID"。这就是代理在重新连接时识别客户端的方式。客户端在第一次连接时使用订阅告诉代理它想要什么消息,然后代理记住该客户端的订阅列表以及与这些订阅匹配的所有消息。

因此,对于您的场景,客户端 B 需要与持久会话连接一次,然后 之后,代理每当它断开连接时都会为它保留消息。