适用于PHP协议解析和协程客户端的是什么

mqtt是一种基于发布/订阅模式的“轻量级”通讯协议,作为一种低开销、低带宽占用的即时通讯协议,已经成为物联网的重要组成部分,今天小编就带大家了解一下simps/mqtt。

适用于PHP协议解析和协程客户端的是什么

MQTT 是一种基于发布/订阅(publish/subscribe)模式的”轻量级”通讯协议,作为一种低开销、低带宽占用的即时通讯协议,已经成为物联网的重要组成部分

Swoole 也给 PHP 提供了开发物联网项目的能力,只需要设置一个 open_mqtt_protocol 选项,启用后就会解析 MQTT 包头,在 Worker 进程的 onReceive 事件每次都会返回一个完整的 MQTT 数据包

当然其他的也有,例如 Workerman 之前提供的 异步 mqtt 客户端库 ,还有其他的开源库,这里就不一一介绍了

立即学习“PHP免费学习笔记(深入)”;

Simps 的第一个版本 MQTT 库 就是参考了 Workerman 的实现,使其能够使用 Swoole 的协程能力,同时也修复了一些问题

在此也要感谢 @walkor 对 PHP 生态作出的贡献

第一个版本的实现是放在了框架当中,限制了一些用户的使用。于是又开始了重构,将 MQTT 独立为一个 library ,方便用户使用的同时也丰富了 PHP 生态,让 PHP 程序员不再局限于 Web 开发

在第一个版本发布之后,Simps 的交流群中也有不少用户询问 MQTT 的问题,Swoole 也修复了一些相关的 Bug,现在使用 PHP + Swoole 去开发物联网相关的项目应该是如虎添翼

同时第一个版本的 MQTT 库,只支持 MQTT 3.x,不支持 MQTT 5.0,在 GitHub 上也没有找到相关支持的类库,所以在重构了 3.x 版本之后,也支持了一下 MQTT 5.0

也许这是第一个支持 MQTT v5.0 协议的 PHP library…

支持 MQTT 协议 3.1、3.1.1 和 5.0 版本,支持 QoS 0、QoS 1、QoS 2,那么它来了,使用 composer 来安装

composer require simps/mqtt

登录后复制

安装成功之后我们来看一下订阅和发布的使用,以 MQTT5.0 为例

订阅

首先应该是订阅,订阅成功之后才能收到对应主题的发布消息,创建一个subscribe.php写入以下内容

include __DIR__ . '/vendor/autoload.php';use SimpsMQTTHexReasonCode;use SwooleCoroutine;use SimpsMQTTClient;use SimpsMQTTTypes;$config = [    'host' => 'broker.emqx.io',    'port' => 1883,    'time_out' => 5,    'user_name' => 'user001',    'password' => 'hLXQ9ubnZGzkzf',    'client_id' => Client::genClientID(),    'keep_alive' => 10,    'properties' => [        'session_expiry_interval' => 60,        'receive_maximum' => 200,        'topic_alias_maximum' => 200,    ],    'protocol_level' => 5,];Coroutineun(function () use ($config) {    $client = new Client($config, ['open_mqtt_protocol' => true, 'package_max_length' => 2 * 1024 * 1024]);    while (!$data = $client->connect()) {        Coroutine::sleep(3);        $client->connect();    }    $topics['simps-mqtt/user001/get'] = [        'qos' => 1,        'no_local' => true,        'retain_as_published' => true,        'retain_handling' => 2,    ];    $timeSincePing = time();    $res = $client->subscribe($topics);    // 订阅的结果    var_dump($res);    while (true) {        $buffer = $client->recv();        if ($buffer && $buffer !== true) {            $timeSincePing = time();            // 收到的数据包            var_dump($buffer);        }        if (isset($config['keep_alive']) && $timeSincePing ping();            if ($buffer) {                echo 'send ping success' . PHP_EOL;                $timeSincePing = time();            } else {                $client->close();                break;            }        }        // QoS1 发布回复        if ($buffer['type'] === Types::PUBLISH && $buffer['qos'] === 1) {            $client->send(                [                    'type' => Types::PUBACK,                    'message_id' => $buffer['message_id'],                    'code' => ReasonCode::SUCCESS                ]            );        }    }});

登录后复制

执行php subscribe.php,就会得到这样的输出

array(3) {  ["type"]=>  int(9)  ["message_id"]=>  int(1)  ["codes"]=>  array(1) {    [0]=>    int(1)  }}

登录后复制

表示订阅成功,codes 对应的是对应订阅主题的 QoS 等级

发布

订阅成功之后,创建一个publish.php来测试发布

include __DIR__ . '/vendor/autoload.php';use SwooleCoroutine;use SimpsMQTTClient;$config = [    'host' => 'broker.emqx.io',    'port' => 1883,    'time_out' => 5,    'user_name' => 'user002',    'password' => 'adIJS1D482sd',    'client_id' => Client::genClientID(),    'keep_alive' => 20,    'properties' => [        'session_expiry_interval' => 60,        'receive_maximum' => 200,        'topic_alias_maximum' => 200,    ],    'protocol_level' => 5,];Coroutineun(function () use ($config) {    $client = new Client($config, ['open_mqtt_protocol' => true, 'package_max_length' => 2 * 1024 * 1024]);    while (!$client->connect()) {        Coroutine::sleep(3);        $client->connect();    }    while (true) {        $response = $client->publish(            'simps-mqtt/user001/get',            '{"time":' . time() . '}',            1,            0,            0,            ['topic_alias' => 1]        );        var_dump($response);        Coroutine::sleep(3);    }});

登录后复制

代码的意思是每隔 3 秒给订阅的主题simps-mqtt/user001/get发布一次消息

打开一个新的终端窗口,执行php publish.php就会得到输出:

array(4) {  ["type"]=>  int(4)  ["message_id"]=>  int(1)  ["code"]=>  int(0)  ["message"]=>  string(7) "Success"}

登录后复制

这里增加了 message,为了用户可读,不需要去查找对应的 code 含义是什么

返回到订阅的窗口,就会看到所打印的发布信息

array(8) {  ["type"]=>  int(3)  ["topic"]=>  string(0) ""  ["message"]=>  string(19) "{"time":1608017156}"  ["dup"]=>  int(1)  ["qos"]=>  int(1)  ["retain"]=>  int(0)  ["message_id"]=>  int(4)  ["properties"]=>  array(1) {    ["topic_alias"]=>    int(1)  }}

登录后复制

这样一个简单的发布订阅功能就实现了

在这个库中还有一些值得优化和还未完成的部分,如还没有支持 MQTT5 的Auth type,以及部分的properties还未支持

想参与的同学可以提交 PR,如果有问题也可以提交 Issue,让我们共同去建设 PHP 的生态

推荐学习:php视频教程

以上就是适用于PHP协议解析和协程客户端的是什么的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2116139.html

(0)
上一篇 2025年2月24日 17:19:54
下一篇 2025年2月24日 17:20:12

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • swoole自学入门教程

    Swoole是一种PHP Web服务器和应用程序框架,具有高性能和协程化特质。通过本教程,你可以了解到如何在PHP中安装和使用Swoole,包括创建HTTP服务器、使用协程和实现WebSocket通信。此外,Swoole还提供了数据库连接池…

    2025年3月13日
    200
  • swoole框架使用教程

    Swoole 框架是一个高性能 PHP 协程框架,通过异步非阻塞 I/O 提升网络处理能力。其中包括:安装:使用 Composer 安装 Swoole 框架创建服务器:创建 Swoole HTTP 服务器进行基本网络处理异步处理请求:使用协…

    2025年3月13日
    200
  • swoole框架中文教程pdf

    Swoole 是一个高效的 PHP 异步编程框架,使用事件驱动架构处理高并发连接。本教程涵盖 Swoole 安装、事件驱动、服务器创建、HTTP 和 WebSocket 处理、数据库操作、队列处理以及部署和监控。Swoole 的优势包括高并…

    2025年3月13日
    200
  • swoole教程全套学习

    Swoole 是一个高性能 PHP 异步网络框架,使用多进程、事件循环和协程实现并发。安装:使用 Composer 或手动安装 Swoole 源代码。使用:创建 HTTP 服务器、处理 WebSocket 连接和使用协程并行执行任务。高级功…

    2025年3月13日
    200
  • php swoole教程

    Swoole 是一个高性能的 PHP 网络框架,它允许创建异步、并发的网络应用程序,以处理大量的请求,其特点包括高性能、低内存消耗、可扩展性和易用性,广泛应用于实时聊天系统、API 网关、Web 服务器和微服务架构。 PHP Swoole …

    2025年3月13日
    200
  • swoole服务器使用教程

    Swoole 服务器是一种高性能、高并发、协程化的 PHP 服务器框架,适用于高流量应用。它支持以下功能:事件驱动模型,可同时处理大量并发连接。并发处理和协程,提升服务器效率。安装及使用简单,只需安装扩展并在 PHP 脚本中创建服务器即可。…

    2025年3月13日
    200
  • swoole使用教程视频交流

    Swoole 是一个 PHP 异步网络框架,通过事件驱动模型提升并发处理能力,适合大量连接和操作的场景。有用的 Swoole 使用教程视频包括:1. Swoole 官网教程;2. PHP 的异步编程:Swoole 教程;3. 使用 Swoo…

    2025年3月13日
    200
  • thinkphp swoole教程

    ThinkPHP框架集成的Swoole教程通过五个步骤讲解如何在ThinkPHP应用中使用Swoole:安装扩展、配置框架、创建控制器、配置路由,最后运行应用。Swoole以其高并发能力、异步通信和低内存占用优势,显著提升了PHP应用的性能…

    2025年3月13日
    200
  • sWoole安装视频教程

    sWoole 可通过 Composer 或 PECL 安装:Composer:composer require swoole/swoolePECL:pecl install swoole安装后,在 php.ini 中添加 extension…

    2025年3月13日
    400
  • ThinkPHP6框架下使用simps/mqtt连接阿里云物联网平台MQTT时如何解决“SwooleCoroutineClient::connect(): async-io must be used in PHP CLI mode”错误?

    thinkphp6框架下使用simps/mqtt连接阿里云物联网平台mqtt时,解决“swoolecoroutineclient::connect(): async-io must be used in php cli mode”错误的完整…

    2025年3月13日
    200

发表回复

登录后才能评论