本文共 1246 字,大约阅读时间需要 4 分钟。
关于阿里云的微服务消息队列,目前官方网站在部分给出了多种语言的SDK参考示例,但是还没有关于php的SDK及接入示例参考。下面主要介绍在使用目前主流的第三方SDK phpMQTT的过程中遇到的问题及解决办法。
在使用MQTT的过程中,关于参数的配置是一个比较让人头疼的问题,很多用户都在配置参数的过程中遇到过问题,这里建议用户首先使用第三方的工具MQTT.fx完成参数的配置调通工作,后续在代码中直接使用即可,避免在参数配置的过程中犯错。具体可以参考博客:。
用户可以直接参考GitHub,使用composer的方式加载包,也可以直接下载整个项目使用。
connect(true, NULL, $username, $password)) { $mqtt->publish("mqtt_topic/notice/", "Hello World PHP! at " . date("r"), 0); $mqtt->close(); echo "send success!";} else { echo "Time out!\n";}?>
现象
用户使用在上面介绍的工具测试可行的参数直接配置到代码中,会报:Uninitialized string offset 的错误,跟踪到源码,发现:
$string = $this->read(4)
并未读入任何信息,但是参数的配置又没有什么问题,部分用户发现使用同样的代码连接自己的MQTT服务器可以正常连接。
原因
目前phpMQTT仅支持mqttv3.1,但是目前阿里云的微服务消息队列使用的是v3.1.1协议,MQTT v3.1.1协议名称长度 4,而3.1的协议长度为6。
解决方案
源码:
$buffer .= chr(0x06); $i++; $buffer .= chr(0x4d); $i++; $buffer .= chr(0x51); $i++; $buffer .= chr(0x49); $i++; $buffer .= chr(0x73); $i++; $buffer .= chr(0x64); $i++; $buffer .= chr(0x70); $i++; $buffer .= chr(0x03); $i++;
调整为:
$buffer .= chr(0x04); $i++; $buffer .= chr(0x4d); $i++; $buffer .= chr(0x51); $i++; $buffer .= chr(0x54); $i++; $buffer .= chr(0x54); $i++; $buffer .= chr(0x04); $i++;
1、发送端使用调整后的源码运行SendDemo;
2、接收监听:
转载地址:http://wibvx.baihongyu.com/