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

本文涉及的产品
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介: v1.3.0 版本新增了一个 Message 类簇

v1.3.0 版本新增了一个 Message 类簇,主要方便用于在 Server 中回复对端 ACK。

use Simps\MQTT\Protocol\Types;
use Simps\MQTT\Protocol\V3;
use Simps\MQTT\Message\ConnAck;
use Simps\MQTT\Message\PingResp;
$server = new Swoole\Server('127.0.0.1', 1883, SWOOLE_BASE);
$server->set(
    [
        'open_mqtt_protocol' => true,
        'package_max_length' => 2 * 1024 * 1024,
    ]
);
$server->on('connect', function ($server, $fd) {
    echo "Client #{$fd}: Connect.\n";
});
$server->on('receive', function (Swoole\Server $server, $fd, $from_id, $data) {
    $data = V3::unpack($data);
    if (is_array($data) && isset($data['type'])) {
        switch ($data['type']) {
            case Types::CONNECT:
                if ($data['protocol_name'] != 'MQTT') {
                    $server->close($fd);
                    return false;
                }
                $server->send(
                    $fd,
                    (new ConnAck())->setCode(0)
                        ->setSessionPresent(0)
                );
                break;
            case Types::PINGREQ:
                $server->send($fd, (new PingResp()));
                break;
        }
    } else {
        $server->close($fd);
    }
});
$server->on('close', function ($server, $fd) {
    echo "Client #{$fd}: Close.\n";
});
$server->start();

在收到CONNECT包之后,需要回复CONNACK报文,之前的版本需要用户手动调用pack类来生成send_data

而现在只需要实例化对应的 Message 类,设置所需要的值即可,如 ConnAck :

  • MQTT3
use Simps\MQTT\Message\ConnAck;
$ack = new ConnAck();
$ack->setCode(0)->setSessionPresent(0);
$server->send($fd, $ack->getContents());
$server->send($fd, $ack);
• MQTT5
use Simps\MQTT\Message\ConnAck;
use Simps\MQTT\Protocol\ProtocolInterface;
$ack = new ConnAck();
$ack->setProtocolLevel(ProtocolInterface::MQTT_PROTOCOL_LEVEL_5_0)
    ->setCode(0)
    ->setSessionPresent(0)
    ->setProperties([]);
$server->send($fd, $ack->getContents());
$server->send($fd, $ack);

其他的可以查看 具体的类 或者 example 文件

更新日志


向下不兼容

  • SUBACK 的payload应该是返回码,修改键名payloadcodes (9e72ce2) (283ff41)

增强

  • 优化 Client recv (#38) (99a85bf)
  • 添加 CONNACK & PUBLISH & PINGRESP Message (700a6c9)
  • 添加 SubAck Message 和更新 getMessageId (09f6334)
  • 添加 DISCONNECT、PUBACK、PUBREC、PUBREL、UNSUBACK (20a78c7)
  • 修改 AbstractConfig (dff6283)
  • 添加 Message 使用示例 (58d5b4a)
  • 添加 getContents 方便在__toString中调用 (a7ba577)
  • 添加 Message 使用文档 (bab2297)

关于 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

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
3月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
219 3
|
1月前
|
网络协议 安全 网络安全
探索网络模型与协议:从OSI到HTTPs的原理解析
OSI七层网络模型和TCP/IP四层模型是理解和设计计算机网络的框架。OSI模型包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,而TCP/IP模型则简化为链路层、网络层、传输层和 HTTPS协议基于HTTP并通过TLS/SSL加密数据,确保安全传输。其连接过程涉及TCP三次握手、SSL证书验证、对称密钥交换等步骤,以保障通信的安全性和完整性。数字信封技术使用非对称加密和数字证书确保数据的机密性和身份认证。 浏览器通过Https访问网站的过程包括输入网址、DNS解析、建立TCP连接、发送HTTPS请求、接收响应、验证证书和解析网页内容等步骤,确保用户与服务器之间的安全通信。
117 3
|
2月前
|
监控 网络协议 网络性能优化
网络通信的核心选择:TCP与UDP协议深度解析
在网络通信领域,TCP(传输控制协议)和UDP(用户数据报协议)是两种基础且截然不同的传输层协议。它们各自的特点和适用场景对于网络工程师和开发者来说至关重要。本文将深入探讨TCP和UDP的核心区别,并分析它们在实际应用中的选择依据。
83 3
|
1月前
|
传感器
Modbus协议深入解析
Modbus协议是由Modicon公司(现施耐德电气)于1979年发明的串行通信协议,主要用于工业自动化系统中的PLC通信。本文深入解析了Modbus协议的主从模式、数据类型(线圈、离散输入、保持寄存器、输入寄存器)、帧结构和通信过程,并介绍了其应用场景和重要性。
49 0
|
2月前
|
网络协议 网络安全 网络虚拟化
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算。通过这些术语的详细解释,帮助读者更好地理解和应用网络技术,应对数字化时代的挑战和机遇。
155 3
|
2月前
|
负载均衡 网络协议 算法
OSPF与其他IGP协议的比较:全面解析与应用场景
OSPF与其他IGP协议的比较:全面解析与应用场景
68 0
|
4月前
|
前端开发 JavaScript 安全
深入解析 http 协议
HTTP(超文本传输协议)不仅用于传输文本,还支持图片、音频和视频等多种类型的数据。当前广泛使用的版本为 HTTP/1.1。HTTPS 可视为 HTTP 的安全增强版,主要区别在于添加了加密层。HTTP 请求和响应均遵循固定格式,包括请求行/状态行、请求/响应头、空行及消息主体。URL(统一资源定位符)用于标识网络上的资源,其格式包含协议、域名、路径等信息。此外,HTTP 报头提供了附加信息,帮助客户端和服务端更好地处理请求与响应。状态码则用于指示请求结果,如 200 表示成功,404 表示未找到,500 表示服务器内部错误等。
113 0
深入解析 http 协议
|
7月前
|
Go Python
使用python实现一个用户态协程
【6月更文挑战第28天】本文探讨了如何在Python中实现类似Golang中协程(goroutines)和通道(channels)的概念。文章最后提到了`wait_for`函数在处理超时和取消操作中的作
68 1
使用python实现一个用户态协程
|
4月前
|
调度 Python
python3 协程实战(python3经典编程案例)
该文章通过多个实战案例介绍了如何在Python3中使用协程来提高I/O密集型应用的性能,利用asyncio库以及async/await语法来编写高效的异步代码。
46 0
|
6月前
|
数据库 开发者 Python
实战指南:用Python协程与异步函数优化高性能Web应用
【7月更文挑战第15天】Python的协程与异步函数优化Web性能,通过非阻塞I/O提升并发处理能力。使用aiohttp库构建异步服务器,示例代码展示如何处理GET请求。异步处理减少资源消耗,提高响应速度和吞吐量,适用于高并发场景。掌握这项技术对提升Web应用性能至关重要。
100 10

推荐镜像

更多