使用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)
}