开发者社区> taro_秋刀鱼> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

如何使用phpMQTT连接阿里云微服务消息队列for IoT

简介: 关于阿里云的微服务消息队列,目前官方网站在接入示例部分给出了多种语言的SDK参考示例,但是还没有关于php的SDK及接入示例参考。下面主要介绍在使用目前主流的第三方SDK phpMQTT的过程中遇到的问题及解决办法。
+关注继续查看

概述

关于阿里云的微服务消息队列,目前官方网站在接入示例部分给出了多种语言的SDK参考示例,但是还没有关于php的SDK及接入示例参考。下面主要介绍在使用目前主流的第三方SDK phpMQTT的过程中遇到的问题及解决办法。


主要流程

参数准备

在使用MQTT的过程中,关于参数的配置是一个比较让人头疼的问题,很多用户都在配置参数的过程中遇到过问题,这里建议用户首先使用第三方的工具MQTT.fx完成参数的配置调通工作,后续在代码中直接使用即可,避免在参数配置的过程中犯错。具体可以参考博客:如何使用MQTT.fx连接微服务消息队列

包的引用

用户可以直接参考GitHub官方链接,使用composer的方式加载包,也可以直接下载整个项目使用。

SendDemo

<?php

use Bluerhinos\phpMQTT;

require("phpMQTT.php");

$server = "******.mqtt.aliyuncs.com";     // change if necessary
$port = 1883;                     // change if necessary
$username = "******";                   // set your username
$password = "******";                   // set your password
$client_id = "GID_******@@@devicename"; // make sure this is unique for connecting to sever - you could use uniqid()

$mqtt = new phpMQTT($server, $port, $client_id);

if ($mqtt->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、接收监听:

_

参考链接

phpMQTT
GitHub Issue

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【阿里云镜像】使用VM虚拟机安装OpenWRT并更换阿里云镜像源
【阿里云镜像】使用VM虚拟机安装OpenWRT并更换阿里云镜像源
78 0
小程序如何使用订阅消息(PHP代码+小程序js代码)
本次开发时又再次用到,结合之前的摸爬滚打的经验,我给大家整理下,做到一文就能让你明白[什么是订阅消息?]、[如何使用订阅消息]、[开发订阅消息],还在等什么?小程序学习订阅本专栏不香嘛?!,顺便关注走一走[滑稽]可以实现给授权了的用户进行消息推送,推送一些指定的消息,带动用户的点击,例如提醒用户签到,或者发送一些奖励到账等通知,目的就是一个,带动用户的点击,留住老用户。在这里我们需要通过,小程序的后台去开通订阅消息,订阅消息企业、个人都可以开通,机关部门可以申请长期订阅模板、而其他的就只能选择一次性模板 消
39 0
ngixn、fpm开机自启动,使用composer安装laravel5.8
ngixn、fpm开机自启动,使用composer安装laravel5.8
50 0
阿里云微服务消息队列(MQTT For IoT)使用Demo
微消息队列 MQTT 版是阿里云推出的一款面向移动互联网以及物联网领域的轻量级消息中间件。如果说传统的消息队列中间件一般应用于微服务之间,那么适用于物联网的微消息队列 MQTT 版则实现了端与云之间的消息传递和真正意义上的万物互联。本文结合最新推出的V3版本实例介绍产品的具体使用流程。
3124 0
阿里云微服务消息队列Token C# 设备端示例Demo
微消息队列 MQTT 版的客户端收发消息时,服务端会根据 MQTT 客户端设置的 Username 和 Password 参数来进行鉴权。目前支持ak,sk通过签名方式认证,也支持通过Token方式进行认证。本文主要介绍基于:Token 使用NET SDK进行设备端连接认证。
1303 0
MQ消息队列.NET SDK的使用
本文主要介绍.NET SDK的使用注意事项及用户可能遇到的问题。
375 0
MQ消息队列.NET SDK的使用
MQ消息队列的SDK目前支持Java、C/C++及.NET三种语言,关于.NET SDK的使用目前因为版本更新的问题,用户在使用的过程中多少会出现这样或那样的问题,特别是SDK中example的使用问题。本文主要介绍.NET SDK的使用注意事项及用户可能遇到的问题。
5834 0
阿里云API、SDK、CLI使用问题:如何提问
欢迎来到阿里云SDK的问答板块。这里有阿里云SDK的研发人员常驻,我们十分乐意帮助您解决你遇到的SDK使用问题。 为了让您更快更有效地得到答案,提高沟通效率,我们这里整理了提问指南。
4005 0
云栖大会·武汉峰会|阿里云E-HPC联合安世亚太、联科集团共建云超算生态
进入“中国制造2025”新时代的节奏又加快了速度!阿里云是国内最大的云计算厂商,去年9月阿里云推出了首个公共云上的超算平台,可一键部署获得媲美大型超算集群环境的云上超算中心,在成本、便捷、扩展性上都有非常大的优势。
3406 0
使用Visifire+ArcGIS API for Silverlight实现Graphic信息的动态图表显示
原文:使用Visifire+ArcGIS API for Silverlight实现Graphic信息的动态图表显示   首先来看一看实现的效果: PS:原始的程序中更新曲线数据时添加了过渡的效果,具体可查看官网的示例: http://www.visifire.com/silverlight_spline_charts_gallery.php 点击其中的一个例子,然后点击Live Updates,就可看到数据更新时的过渡效果。
968 0
+关注
taro_秋刀鱼
博客园主页:https://home.cnblogs.com/u/taro/
文章
问答
文章排行榜
最热
最新
相关电子书
更多
API网关实践
立即下载
workshop专场--容器、消息&IoT专场-开发者动手实践营-容器、消息和IoT-PouchContainer + Kubernetes 云原生业务支持实践
立即下载
基于 OpenResty 和 Node.js 的个推微服务实践
立即下载