PHP MQTT 实践

匿名 (未验证) 提交于 2019-12-02 22:11:45

MQTT介绍:http://mqtt.org

服务器端
https://mosquitto.org/download/

PHP客户端
https://github.com/bluerhinos/phpMQTT

MQTT QOS等级订阅和发布的关系
https://www.jianshu.com/p/ebe4b2c0461d

qos = 0:仅发一次,不管是否能收到
qos = 1:没返回一直发,可能有重复接收(接收到消息可能未传递给客户端)
qos = 2:保证必须收到,并且不重复(使用MSG_ID保证不重复接收)

也就是服务器只会按pub和sub两者qos等级最小的那个qos规则来发送消息。
pub时指定的qos是服务器肯定按此规则接收,但是最终订阅者不一定。
sub时指定的qos表示订阅者可以接收的最高消息等级,也就是可能收到更低等级的消息。

遇到的问题



消息发布

<?php  require("../phpMQTT.php");  $server    = '127.0.0.1';     // 服务器IP $port      = 1883;            // 服务器端口 $username  = '';              // 用户名 $password  = '';              // 密码 $client_id = 'pub_' . uniqid();  $mqtt = new Bluerhinos\phpMQTT($server, $port, $client_id);  if ($mqtt->connect(true, NULL, $username, $password)) {     for ($i=0; $i<100; $i++)     {         $topic = 'topic01';         $msg = 'Hello World! at (' . $i . ') ' . date('Y-m-d H:i:s');         echo date('Y-m-d H:i:s') . ' SEND [' . $topic . '] ' . $msg . PHP_EOL;                  // qos = 0:仅发一次,不管是否能收到         // qos = 1:没返回一直发,可能有重复接收         // qos = 2:保证必须收到,并且不重复         $mqtt->publish($topic, $msg, 0);         usleep(100000);     }          $mqtt->close(); } else {     echo "Time out!\n"; }

消息订阅

<?php  require("../phpMQTT.php");  $server    = '127.0.0.1';     // 服务器IP $port      = 1883;            // 服务器端口 $username  = '';              // 用户名 $password  = '';              // 密码 $client_id = 'sub_' . uniqid();  $mqtt = new Bluerhinos\phpMQTT($server, $port, $client_id);  $mqtt->debug = true;  if(!$mqtt->connect(true, NULL, $username, $password)) {     echo "连接失败!\n";     exit(1); }  // 订阅列表 $topics = [     'topic01' => ['qos' => 0, 'function' => 'procmsg'], ];  $mqtt->subscribe($topics, 0);  while ($mqtt->proc()){}  $mqtt->close();  // 消息处理函数 function procmsg($topic, $msg) {     echo date('Y-m-d H:i:s') . ' [' . $topic . '] ' . $msg . PHP_EOL; }

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!