每次加载索引时,如何接收发送到 MQTT 主题的所有消息到网页?

问题描述

所以我是 MQTT 的新手,我必须制作一个“消息传递”项目,在没有很长的加载时间的情况下加载索引页面中的所有消息(发送到某个主题),我正在使用 Yii2 Framework Advanced项目,我已经完成了发布代码,在模型中我创建了 AfterSave 方法,每次将某些内容保存到数据库时,它都会向我的 RaspBerry PI 中的 MQTT broker 发布一条消息

示例

我拥有一家酒店,每次登录到我的后端时,我都希望在我的索引中包含在 MQTT mosquitto“请求-预订”(如通知)中发送到此主题的所有预订请求。

就像我说的,我正在使用 Yii2 框架高级项目,我用于 MQTT 的扩展是 Bluerhinos\PHPMQTT

我已有的代码

类模型 ReservationRequest.PHP(这是有效的并发送到主题,因为我已经在 shell 中进行了测试)

public function afterSave($insert,$changedAttributes) {
        parent::afterSave($insert,$changedAttributes); // Todo: Change the autogenerated stub
        if ($insert){
            $this->publish("request-reservation","New notification of a reservation request with the ID: '. $this->id . PHP_EOL");
        }
}

欢迎任何建议,感谢您的关注

解决方法

排序答案是你没有。

MQTT 不是消息队列系统。它只会对尚未传送到具有持久订阅的客户端的消息进行排队,该订阅在发送消息时当前处于离线状态。

你可能有两个选择

  1. 发布一条包含所有房间当前状态的消息,例如{ "room1": "occupied","room2": "free",...} 并设置保留标志,以便在订阅该主题时,该消息的最新版本将始终传递给客户端。

  2. 向后端发出 REST 调用,该调用可以对数据库运行查询以检索所有房间的当前状态。