脚本宝典收集整理的这篇文章主要介绍了PHP MQTT 实践,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
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表示订阅者可以接收的最高消息等级,也就是可能收到更低等级的消息。
遇到的问题
1. qos=2 一直没有测试成功,mosquITto 已经收到客户端的消息,但订阅端就是接收不到。
2. 当有多个订阅端时,又是后收到的消息居然会不全,前面会有乱码出现。
3. 没有HTTP简单直接;感觉没有HTTP可靠通用;
消息发布
<?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,$client_id); $mqtt->debug = true; if(!$mqtt->connect(true,$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; }
以上是脚本宝典为你收集整理的PHP MQTT 实践全部内容,希望文章能够帮你解决PHP MQTT 实践所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。