##此处填写阿里云帐号 AccessKey
$accessKey = 'xxxxxxxxx';
##此处填写阿里云帐号 SecretKey
$secretKey = 'xxxxxxxxxxxxxxxxx';
## 接入点地址,购买实例后从控制台获取
$endPoint = 'xxxxxxxxxxxxxxxx';
##实例 ID,购买后从控制台获取
$instanceId = 'post-cn-v641cj56e0b';
## MQTT Topic,其中第一级 Topic 需要在 MQTT 控制台提前申请
$topic = 'kuwande_dlc1001_userLogin';
## MQTT 客户端ID 前缀, GroupID,需要在 MQTT 控制台申请
$groupId = 'GID_10001';
## MQTT 客户端ID 后缀,DeviceId,业务方自由指定,需要保证全局唯一,禁止 2 个客户端连接使用同一个 ID
$deviceId = '10001';
##用于设置顺序属性的系统命令 topic
$sysCmdTopic='$SYS/enableOrderMsg';
$qos = 1;
$port = 1883;
$keepalive = 90;
$cleanSession = true;
$clientId = $groupId . '@@@' . $deviceId;
echo $clientId . "\n";
$mid = 0;
## 初始化客户端,需要设置 clientId 和 CleanSession 参数,参考官网文档规范
$mqttClient = new Mosquitto\Client($clientId, $cleanSession);
## 设置鉴权参数,参考 MQTT 客户端鉴权代码计算 username 和 password
$username = 'Signature|' . $accessKey . '|' . $instanceId;
$sigStr = hash_hmac("sha1", $clientId, $secretKey, true);
$password = base64_encode($sigStr);
echo "UserName:" . $username . " Password:" . $password . "\n";
$mqttClient->setCredentials($username, $password);
## 设置连接成功回调
$mqttClient->onConnect(function ($rc, $message) use ($mqttClient, &$mid, $topic, $qos, $sysCmdTopic) {
echo "Connnect to Server Code is " . $rc . " message is " . $message . "\n";
## 连接成功后需要在发消息之前提前设置顺序属性,然后再发消息,才能保证同一个 clientId 发的消息顺序。
$mqttClient->subscribe($topic, $qos);
});
## 设置消息接收回调
$mqttClient->onMessage(function ($message) {
echo "Receive Message From mqtt, topic is " . $message->topic . " qos is " . $message->qos . " messageId is " . $message->mid . " payload is " . $message->payload . "\n";
});
$mqttClient->connect($endPoint, $port, $keepalive);
$mqttClient->loopForever();
以上方法怎么改进下 可以订阅多个主题?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。