当前位置: 首页 > news >正文

php-mqtt/client 发布、订阅

一、环境要求

        php8.1 + composer


二、安装扩展

composer require php-mqtt/client

三、php-mqtt/client 与 Bluerhinos/phpMQTT 对比

特性php-mqtt/clientBluerhinos/phpMQTT
开发语言PHP 原生实现PHP 原生实现
依赖扩展需 PHP 7.4.21+,推荐 Swoole/Workerman仅需 PHP socket 扩展
协议支持MQTT 3.1/3.1.1MQTT 3.1
异步支持需配合 Swoole/Workerman 实现异步同步阻塞模式
  • php-mqtt/client

    • 提供更现代的 API 设计,支持 Composer 一键安装。
    • 适合复杂场景(如物联网应用),支持 QoS 等级和遗嘱消息。
    • 文档详细,社区活跃度较高。
  • Bluerhinos/phpMQTT

    • 轻量级,代码简洁,适合快速集成。
    • 仅支持基础发布/订阅功能,缺少高级特性(如自动重连)。
    • 需手动管理连接和消息循环。

四、使用与demo

        导入 composer autoload 文件和 php-mqtt/client
require('vendor/autoload.php');use \PhpMqtt\Client\MqttClient;

这里写一个简单的demo提供参考


<?php
require __DIR__ . '/vendor/autoload.php';
use PhpMqtt\Client\MqttClient;
use PhpMqtt\Client\ConnectionSettings;class MqttService {private static $instance;private $mqtt;private $config = ['host' => 'broker.emqx.io','port' => 1883,'client_id' => 'global_mqtt_client','username' => null,'password' => null,'keepalive' => 60];private function __construct() {$this->initConnection();}public static function getInstance(): self {if (!isset(self::$instance)) {self::$instance = new self();}return self::$instance;}private function initConnection(): void {$this->mqtt = new MqttClient($this->config['host'],$this->config['port'],$this->config['client_id']);$settings = (new ConnectionSettings())->setUsername($this->config['username'])->setPassword($this->config['password'])->setKeepAliveInterval($this->config['keepalive']);$this->mqtt->connect($settings, true);}public function publish(string $topic, string $message, int $qos = 0): void {$this->mqtt->publish($topic, $message, $qos);}public function subscribe(string $topic, callable $callback, int $qos = 0): void {$this->mqtt->subscribe($topic, $callback, $qos);$this->mqtt->loop(false);}public function __destruct() {if ($this->mqtt->isConnected()) {$this->mqtt->disconnect();}}
}

该方案通过单例模式确保全局唯一连接,支持自动重连和连接池管理


require 'MqttService.php';// 全局调用示例
$mqtt = MqttService::getInstance();// 发布消息
$mqtt->publish('global/topic', 'Global message');// 订阅消息(需保持进程运行)
$mqtt->subscribe('global/topic', function($topic, $msg) {echo "Received: $msg\n";
});

打完收工。  

http://www.lqws.cn/news/592039.html

相关文章:

  • 学习threejs,使用自定义GLSL 着色器,生成艺术作品
  • Redis-渐进式遍历
  • Android实现仿iOS风格滚动时间选择器
  • 【机器学习深度学习】理解欠拟合、拟合、过拟合
  • React安装使用教程
  • Linux->进程控制(精讲)
  • 文心一言开源版测评:能力、易用性与价值的全面解析
  • 通过http调用来访问neo4j时报错,curl -X POST 执行指令报错
  • 博途多重背景、参数实例
  • swing音频输入
  • 跨境证券交易系统合规升级白皮书:全链路微秒风控+开源替代,护航7月程序化交易新规落地
  • 7.可视化的docker界面——portainer
  • CloudBase AI ToolKit实战:从0到1开发一个智能医疗网站
  • LLM中的思维链,仅仅在提示词中加上思维链,让模型输出,和加上思维链限制模型输出答案,这两方式模型是不是进行了思考的
  • 鸿蒙Next开发中三方库使用指南之-nutpi-privacy_dialog集成示例
  • 用“做饭”理解数据分析流程(Excel三件套实战)​
  • 网站崩溃的幕后黑手:GPTBot爬虫的流量冲击
  • 论文阅读:Align and Prompt (ALPRO 2021.12)
  • 零开始git使用教程-传html文件
  • 浅谈Docker Kicks in的应用
  • 51单片机制作万年历
  • 观察者模式
  • 新版本 Spring Data Jpa + QueryDSL 使用教程
  • TensorFlow源码深度阅读指南
  • 【科研绘图系列】基于R语言的复杂热图绘制教程:环境因素与染色体效应的可视化
  • C#程序设计简介
  • 9-2 MySQL 分析查询语句:EXPLAIN(详细说明)
  • Milvus docker-compose 部署
  • 从苹果事件看 ARM PC市场的未来走向
  • 2025年Java后端开发岗面试的高频项目场景题 + 八股文(100w字)