PHP
本文主要介绍如何在 PHP 项目中使用 php-mqtt/client 客户端库 ,实现 SX-IOT设备与 MQTT 服务器的连接、订阅、收发消息等功能。
前提条件
安装依赖包
1sudo apt install php composer -y
连接使用
连接设置
本文将使用自定义的接入认证方式,服务器接入信息如下:
Broker: mqtt.geek-smart.cn
TCP Port: 1883
WebSocket Port: 8083
导入依赖包
1require('vendor/autoload.php');
2
3use \PhpMqtt\Client\MqttClient;
4use \PhpMqtt\Client\ConnectionSettings;
定义连接地址、认证信息以及消息发布主题
设置 MQTT Broker 连接地址,端口以及 topic。
1 $server = "mqtt.geek-smart.cn";
2 $port = 1883;
3 $clientId = "php-client";
4 $username = '************';
5 $password = '************';
6 $clean_session = false;
7 $pub_topic = '/HYUGHV/lVtAcHuor***/4cebd60bf***/publish';
8 $sub_topic = '/HYUGHV/lVtAcHuor***/4cebd60bf***/subscribe';
9 $mqtt_version = MqttClient::MQTT_3_1_1;
定义消息发布函数
1 $payload = array(
2 'type' => 'info'
3 );
4
5 $jsonp = json_encode($payload);
6
7 $mqtt->publish(
8 // topic
9 $pub_topic,
10 // payload
11 $jsonp,
12 // qos
13 0,
14 // retain
15 true
16 );
定义 on_message 回调函数,用于打印订阅主题接收的消息内容
1 $mqtt->subscribe($sub_topic, function ($topic, $message) {
2 printf("Received message on topic [%s]: %s\n", $topic, $message);
3 }, 0);
连接 MQTT
1 $mqtt = new MqttClient($server, $port, $clientId, $mqtt_version);
2
3 $mqtt->connect($connectionSettings, $clean_session);
完整代码
1 <?php
2
3 require('vendor/autoload.php');
4
5 use \PhpMqtt\Client\MqttClient;
6 use \PhpMqtt\Client\ConnectionSettings;
7
8 $server = "mqtt.geek-smart.cn";
9 $port = 1883;
10 $clientId = "php-client";
11 $username = '************';
12 $password = '************';
13 $clean_session = false;
14 $pub_topic = '/HYUGHV/lVtAcHuor***/4cebd60bf***/publish';
15 $sub_topic = '/HYUGHV/lVtAcHuor***/4cebd60bf***/subscribe';
16 $mqtt_version = MqttClient::MQTT_3_1_1;
17
18 $connectionSettings = (new ConnectionSettings)
19 ->setUsername($username)
20 ->setPassword($password)
21 ->setKeepAliveInterval(60);
22 // Last Will
23 //->setLastWillTopic('last-will/topic')
24 //->setLastWillMessage('client disconnect')
25 //->setLastWillQualityOfService(1);
26
27
28 $mqtt = new MqttClient($server, $port, $clientId, $mqtt_version);
29
30 $mqtt->connect($connectionSettings, $clean_session);
31 printf("client connected\n");
32
33 $payload = array(
34 'type' => 'info'
35 );
36
37 $jsonp = json_encode($payload);
38
39 $mqtt->publish(
40 // topic
41 $pub_topic,
42 // payload
43 $jsonp,
44 // qos
45 0,
46 // retain
47 true
48 );
49 printf("msg send $jsonp to $pub_topic\n");
50
51 $mqtt->subscribe($sub_topic, function ($topic, $message) {
52 printf("Received message on topic [%s]: %s\n", $topic, $message);
53 }, 0);
54
55 $mqtt->loop(true);
测试验证
运行
1php pubsub_tcp.php