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

How can I receive all the messages send to a topic of MQTT to a webpage everytime I load the index?

所以我是 MQTT 的新手,我必须制作一个“消息传递”项目,在我的索引页面中加载所有消息(发送到某个主题)而加载时间不会很长,我正在使用 Yii2 Framework Advanced Project 并且我已经完成了发布代码,在模型中我创建了 AfterSave 方法,每次它向数据库保存一些东西时它都会向我的 Raspberry PI[=11= 中的 MQTT Broker 发布一条消息]

例子

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

就像我说的,我正在使用 Yii2 Framework Advanced Project,我用于 MQTT 的扩展是 Bluerhinos\phpMQTT

我已有的代码:

Class 模型 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 不是消息队列系统。它只会将尚未传送到具有持久订阅的客户端的消息排队,该持久订阅在发送消息时当前处于脱机状态。

您可能有 2 个选择

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

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