PHPMQTT v1.3.1 版本发布,MQTT 协议解析 & 协程客户端

栏目: 软件资讯 · 发布时间: 4年前

内容简介:上个版本发布的知乎文章中有用户评论,遇到了握手失败的情况,联系了我之后进行了测试,我这里确实没问题,不过我删除了一段代码: $will = [ 'topic' => '', 'qos' => 0, 'retain' => 0, ...

上个版本发布的知乎文章中有用户评论,遇到了握手失败的情况,联系了我之后进行了测试,我这里确实没问题,不过我删除了一段代码:

$will = [
    'topic' => '',
    'qos' => 0,
    'retain' => 0,
    'message' => '',
];
$client->connect(true, $will);

改为了直接进行connect

$client->connect();

由于使用的是 MQTT3,所以没有 MQTT5 中的 code 属性,需要通过抓包才可以获取到错误原因。

这里换为 MQTT5 之后就可以直接获取到错误原因,如以下代码就可以获取到错误原因

use Simps\MQTT\Client;
use Simps\MQTT\Config\ClientConfig;
use Simps\MQTT\Hex\ReasonCode;
use function Swoole\Coroutine\run;

run(function () {
    $config = new ClientConfig();
    $config->setUserName('')
        ->setPassword('')
        ->setClientId(Client::genClientID())
        ->setKeepAlive(10)
        ->setProtocolLevel(5)
        ->setDelay(3000) // 3s
        ->setMaxAttempts(5)
        ->setSwooleConfig([
            'open_mqtt_protocol' => true,
            'package_max_length' => 2 * 1024 * 1024,
        ]);

    $client = new Client('broker.emqx.io', 1883, $config);
    $will = [
        'topic' => '',
        'qos' => 0,
        'retain' => 0,
        'message' => 'byebye',
    ];
    $res = $client->connect(true, $will);
    var_dump($res, ReasonCode::getReasonPhrase($res['code']));
});

将 code 换为原因,就可以获取到错误原因为:Topic Name invalid

array(3) {
  ["type"]=>
  int(2)
  ["session_present"]=>
  int(0)
  ["code"]=>
  int(144)
}
string(18) "Topic Name invalid"

查看 MQTT 协议文档,会发现:

The Will Topic MUST be a UTF-8 Encoded String as defined

遗嘱消息中的 topic 不能为空,必须是一个有效的 UTF-8 字符串,长度大于 0

所以这里此版本中增加了限制,如果存在遗嘱消息,并且 topic 为空,则会直接抛出异常:

PHP Fatal error: Uncaught Simps\MQTT\Exception\ProtocolException: Topic cannot be empty

更新日志

增强

  • 增加 isMQTT5 方法 (f27f85c)
  • 增加常量可见性 (#41)
  • 为 getContents 方法添加 getArray 参数来用于客户端回复对端 ACK (#42)
  • 添加 Message 测试 (8f7fe30)
  • 更新 Message 文档 (a41654b)
  • 更新 ProtocolException 并增加测试 (19a6bee)

修复

  • 修复遗嘱消息的 topic 不能为空 (b56fda1)

关于 PHPMQTT

  • MQTT 协议解析 & 协程客户端
  • 适用于 PHP 的 MQTT 协议解析和协程客户端
  • 支持 MQTT 协议 3.1、3.1.1 和 5.0 版本,支持 QoS 0、QoS 1、QoS 2
  • 首个支持 MQTT v5.0 协议的 PHP library

文档:https://mqtt.simps.io
GitHub:https://github.com/simps/mqtt
Gitee:https://gitee.com/phpiot/mqtt

支持记得点个 Star~


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

CSS3 Solutions

CSS3 Solutions

Marco Casario / Apress / 2012-8-13 / GBP 35.50

CSS3 brings a mass of changes, additions, and improvements to CSS across a range of new modules. Web designers and developers now have a whole host of new techniques up their sleeves, from working wit......一起来看看 《CSS3 Solutions》 这本书的介绍吧!

html转js在线工具
html转js在线工具

html转js在线工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具