使用php代码实现发布订阅。
演示服务环境:Ubuntu18,php7.4,Mosquitto(mosquitto is an MQTT v3.1.1/v3.1 broker)
需要安装mosquitto 的php扩展
1. 订阅者
subscriber.php
<?php//Mosquitto客户端类$client = new Mosquitto\Client();//连接broker$client->connect('10.10.20.200', 1883, 5);//订阅的topic为chan,服务质量为2$client->subscribe('chan', 2);//打印订阅消息$client->onMessage(function($message) {var_dump($message);//var_dump(json_decode($message->payload));});$client->loopForever();
注意:服务质量为2时,且发布者的消息为持久的,每次订阅者连接broker时,都会收到。
2. 发布者
publisher.php
<?php//Mosquitto客户端类$client = new Mosquitto\Client();//连接broker$client->connect('10.10.20.200', 1883, 5);$payload = ['status' => 'offline','device_sn' => 'AB9CDDBDB62D',];/*** publish($topic, $payload[, $qos = 0, $retain = false])* $topic (string) – 要发表的主题* $payload (string) – 消息体* $qos (int) – 服务质量,值0,``1或2* $retain (boolean) – 是否保留此消息,默认为false*///发布消息(注意:消息为持久的,每次订阅者连接broker时,都会收到)$client->publish('chan', json_encode($payload), 2, false);$client->loopForever();
- 执行
php subscriber.php,php客户端窗口处于等待状态; - 重新打开一新窗口,然后执行
php publisher.php
订阅者窗口开始有数据出来,说明订阅成功,打印消息如下:
object(Mosquitto\Message)#3 (5) {["mid"]=>int(2)["topic"]=>string(4) "chan"["payload"]=>string(47) "{"status":"offline","device_sn":"AB9CDDBDB62D"}"["qos"]=>int(2)["retain"]=>bool(false)}
