【问题标题】:Mqtt message delivery when user will come online用户上线时的 Mqtt 消息传递
【发布时间】:2020-04-12 11:06:31
【问题描述】:

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

假设我们正在使用 mqtt+mosquitto。

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

用户 A 正在向用户 B 发送消息,但用户 B 现在处于离线状态。每当用户 B 上线时,他都会收到关于他的待处理消息的通知。

如何使用代理实现此场景

【问题讨论】:

    标签: firebase-cloud-messaging mqtt message-queue publish-subscribe mosquitto


    【解决方案1】:

    MQTT 有一个“持久会话”的概念。首次连接时,客户端在连接数据包中向代理发送一个名为“干净会话”的标志。通过将此标志设置为 false,客户端要求代理“记住我”。

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

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

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

    【讨论】:

    • 您还需要订阅 QOS 1 或 2 的相关主题,因为默认情况下,即使使用持久会话,QOS 0 消息也不会排队。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-08
    • 2015-01-10
    • 2021-08-31
    • 1970-01-01
    • 1970-01-01
    • 2016-03-13
    • 2021-10-30
    相关资源
    最近更新 更多