首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MQTT 与 PHP 使用实时消息传递指南

MQTT 与 PHP 使用实时消息传递指南

作者头像
Tinywan
发布2025-07-24 09:39:22
发布2025-07-24 09:39:22
18800
代码可运行
举报
文章被收录于专栏:开源技术小栈开源技术小栈
运行总次数:0
代码可运行

在本教程中,将使用 php-mqtt/client 库,它在 Composer 上的下载量最高。它是一种可靠、易于使用的解决方案,用于将 MQTT 集成到 PHP 应用程序中。如果您正在寻找其他用于 PHP 的 MQTT 客户端库,您可以在 Packagist 上探索更多选项。

为 PHP 选择最佳 MQTT 客户端库

MQTT 通信属于 HTTP 系统之外的网络通信场景。由于 PHP 特性的限制,在 PHP 系统中使用 Swoole/Workerman 等网络通信扩展可以带来更好的体验。

本文将不再重复其使用。相关的 MQTT 客户端库如下:

  • workerman/mqtt:基于 workerman 的 PHP 异步 MQTT 客户端。
  • simps/mqtt:MQTT 协议 PHP 的分析和协程客户端。

设置 PHP 项目以进行 MQTT 集成

确认 PHP 版本

首先,请确保您使用的是 PHP 7.4.21 或更高版本。您可以通过在终端中运行以下命令来检查您的 PHP 版本:

代码语言:javascript
代码运行次数:0
运行
复制
php --version

PHP 7.4.21 (cli) (built: Jul 12 2021 11:52:30) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.21, Copyright (c), by Zend Technologies

使用 Composer 安装

Composer 是一款功能强大的 PHP 依赖管理工具,可简化 PHP 项目所需库的安装。

要安装 php-mqtt/client 库,请在项目根目录中运行以下命令:

代码语言:javascript
代码运行次数:0
运行
复制
composer require php-mqtt/client

这将下载并安装 php-mqtt/client 库及其所有依赖项。安装完成后,您可以在 PHP 代码中使用该库。

PHP MQTT 用法

连接到 MQTT 代理

本文将使用 EMQX 提供的免费公共 MQTT 代理 ,该代理是在 EMQX MQTT 平台上创建的。服务器访问信息如下:

  • Broker:broker.emqx.io
  • TCP 端口:1883
  • SSL/TLS 端口:8883

导入自动加载文件

在 PHP 代码中使用 php-mqtt/client 库之前,您需要导入 Composer 的自动加载文件。请在您的 PHP 脚本中添加以下代码:

代码语言:javascript
代码运行次数:0
运行
复制
require('vendor/autoload.php');

use \PhpMqtt\Client\MqttClient;

设置 MQTT Broker 连接参数

设置 MQTT Broker 连接地址、端口和主题。同时,我们调用 PHP rand 函数随机生成 MQTT 客户端 ID。

代码语言:javascript
代码运行次数:0
运行
复制
$server   = 'broker.emqx.io';
$port     = 1883;
$clientId = rand(5, 15);
$username = 'emqx_user';
$password = 'public';
$clean_session = false;
$mqtt_version = MqttClient::MQTT_3_1_1;

编写 MQTT 连接函数

使用上述参数进行连接,并通过 ConnectionSettings 设置连接参数,例如:

代码语言:javascript
代码运行次数:0
运行
复制
$connectionSettings = (new ConnectionSettings)
  ->setUsername($username)
  ->setPassword($password)
  ->setKeepAliveInterval(60)
  ->setLastWillTopic('emqx/test/last-will')
  ->setLastWillMessage('client disconnect')
  ->setLastWillQualityOfService(1);

订阅

程序订阅 emqx/test 的 topic,并为订阅配置回调函数来处理接收到的消息。在这里,我们打印出从订阅中获得的主题和消息:

代码语言:javascript
代码运行次数:0
运行
复制
$mqtt->subscribe('emqx/test', function ($topic, $message) {
    printf("Received message on topic [%s]: %s\n", $topic, $message);
}, 0);

发布

构造一个有效负载并调用 publish 函数将消息发布到 emqx/test 主题。发布后,客户端需要进入轮询状态来处理传入的消息和重传队列:

代码语言:javascript
代码运行次数:0
运行
复制
for ($i = 0; $i< 10; $i++) {
  $payload = array(
    'protocol' => 'tcp',
    'date' => date('Y-m-d H:i:s'),
    'url' => 'https://github.com/emqx/MQTT-Client-Examples'
  );
  $mqtt->publish(
    // topic
    'emqx/test',
    // payload
    json_encode($payload),
    // qos
    0,
    // retain
    true
  );
  printf("msg $i send\n");
  sleep(1);
}

// The client loop to process incoming messages and retransmission queues
$mqtt->loop(true);

完整代码

以下是连接、发布和订阅 MQTT 代理的完整 PHP 代码:

pubsub_tcp.php

代码语言:javascript
代码运行次数:0
运行
复制
<?php

require('vendor/autoload.php');

use \PhpMqtt\Client\MqttClient;
use \PhpMqtt\Client\ConnectionSettings;

$server   = 'broker.emqx.io';
$port     = 1883;
$clientId = rand(5, 15);
$username = 'emqx_user';
$password = 'public';
$clean_session = false;
$mqtt_version = MqttClient::MQTT_3_1_1;

$connectionSettings = (new ConnectionSettings)
  ->setUsername($username)
  ->setPassword($password)
  ->setKeepAliveInterval(60)
  ->setLastWillTopic('emqx/test/last-will')
  ->setLastWillMessage('client disconnect')
  ->setLastWillQualityOfService(1);


$mqtt = new MqttClient($server, $port, $clientId, $mqtt_version);

$mqtt->connect($connectionSettings, $clean_session);
printf("client connected\n");

$mqtt->subscribe('emqx/test', function ($topic, $message) {
    printf("Received message on topic [%s]: %s\n", $topic, $message);
}, 0);

for ($i = 0; $i< 10; $i++) {
  $payload = array(
    'protocol' => 'tcp',
    'date' => date('Y-m-d H:i:s'),
    'url' => 'https://github.com/emqx/MQTT-Client-Examples'
  );
  $mqtt->publish(
    // topic
    'emqx/test',
    // payload
    json_encode($payload),
    // qos
    0,
    // retain
    true
  );
  printf("msg $i send\n");
  sleep(1);
}

$mqtt->loop(true);

测试

运行 MQTT 消息发布代码后,我们会看到客户端连接成功,消息已经一一发布并接收成功:

代码语言:javascript
代码运行次数:0
运行
复制
php pubsub_tcp.php

在本教程中演示了如何使用 PHP 中的 php-mqtt/client 库连接到 MQTT 代理、发布和订阅 MQTT 主题以及接收实时消息。这是使用 PHP 和 MQTT 构建功能强大的实时应用程序的基础步骤。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-07-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源技术小栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为 PHP 选择最佳 MQTT 客户端库
  • 设置 PHP 项目以进行 MQTT 集成
    • 确认 PHP 版本
    • 使用 Composer 安装
  • PHP MQTT 用法
    • 连接到 MQTT 代理
    • 导入自动加载文件
    • 设置 MQTT Broker 连接参数
    • 编写 MQTT 连接函数
    • 订阅
    • 发布
  • 完整代码
  • 测试
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档