.. vim: syntax=rst .. highlight:: sh PHP ============================ 本文主要介绍如何在 PHP 项目中使用 php-mqtt/client 客户端库 ,实现 SX-IOT设备与 MQTT 服务器的连接、订阅、收发消息等功能。 前提条件 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 安装依赖包 ------------------ .. code-block:: bash :linenos: sudo apt install php composer -y 连接使用 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 连接设置 ------------------ 本文将使用自定义的接入认证方式,服务器接入信息如下: - Broker: **mqtt.geek-smart.cn** - TCP Port: **1883** - WebSocket Port: **8083** 导入依赖包 ------------------ .. code-block:: php :linenos: require('vendor/autoload.php'); use \PhpMqtt\Client\MqttClient; use \PhpMqtt\Client\ConnectionSettings; 定义连接地址、认证信息以及消息发布主题 ------------------------------------------------------ 设置 MQTT Broker 连接地址,端口以及 topic。 .. code-block:: php :linenos: $server = "mqtt.geek-smart.cn"; $port = 1883; $clientId = "php-client"; $username = '************'; $password = '************'; $clean_session = false; $pub_topic = '/HYUGHV/lVtAcHuor***/4cebd60bf***/publish'; $sub_topic = '/HYUGHV/lVtAcHuor***/4cebd60bf***/subscribe'; $mqtt_version = MqttClient::MQTT_3_1_1; 定义消息发布函数 ------------------ .. code-block:: php :linenos: $payload = array( 'type' => 'info' ); $jsonp = json_encode($payload); $mqtt->publish( // topic $pub_topic, // payload $jsonp, // qos 0, // retain true ); 定义 on_message 回调函数,用于打印订阅主题接收的消息内容 ------------------------------------------------------------------------ .. code-block:: php :linenos: $mqtt->subscribe($sub_topic, function ($topic, $message) { printf("Received message on topic [%s]: %s\n", $topic, $message); }, 0); 连接 MQTT ------------------------------------------------------------------------ .. code-block:: php :linenos: $mqtt = new MqttClient($server, $port, $clientId, $mqtt_version); $mqtt->connect($connectionSettings, $clean_session); 完整代码 ------------------------------------------------------------------------ .. code-block:: php :linenos: setUsername($username) ->setPassword($password) ->setKeepAliveInterval(60); // Last Will //->setLastWillTopic('last-will/topic') //->setLastWillMessage('client disconnect') //->setLastWillQualityOfService(1); $mqtt = new MqttClient($server, $port, $clientId, $mqtt_version); $mqtt->connect($connectionSettings, $clean_session); printf("client connected\n"); $payload = array( 'type' => 'info' ); $jsonp = json_encode($payload); $mqtt->publish( // topic $pub_topic, // payload $jsonp, // qos 0, // retain true ); printf("msg send $jsonp to $pub_topic\n"); $mqtt->subscribe($sub_topic, function ($topic, $message) { printf("Received message on topic [%s]: %s\n", $topic, $message); }, 0); $mqtt->loop(true); 测试验证 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 运行 ------------------------------------------------------------------------ .. code-block:: bash :linenos: php pubsub_tcp.php