云计算中的无服务器体系结构允许开发人员在不麻烦基础架构管理的情况下专注于代码开发和部署。尤其是无服务器MQTT提供了MQTT消息服务,该服务根据需求自动扩展,减少了对手动干预的需求。
要了解有关无服务器MQTT的更多信息,请阅读我们的博客文章Next-Gen Cloud MQTT Service: Meet EMQX Cloud Serverless。在此博客系列中,我们将指导您使用各种客户端库来设置MQTT连接,订阅,消息传递等,并使用无服务的MQTT经纪人为您的特定项目进行设置。
介绍
PHP是一种主要用于Web开发的服务器端脚本语言。对于IoT应用程序,PHP也可用于构建后端基础架构和处理数据。
php-mqtt client是一个MQTT client,使您可以连接到MQTT经纪人,发布消息并订阅主题。该博客将使用PHP-MQTT客户端连接无服务器MQTT代理。整个项目可以在MQTT Client Examples中下载。
免费的无服务器MQTT经纪人
EMQX Cloud Serverless是最新的MQTT broker在公共云上提供的所有无服务器优势。您只需单击几下即可在几秒钟内启动无服务器部署。此外,用户每月可以获得100万间免费的会话分钟,足以让23个设备在整个月内在线,非常适合小型物联网测试方案。
如果您尚未尝试过无服务器部署,请关注the guide in this blog免费创建一个。通过在线指南完成注册过程后,您将在部署中获得以下类似信息的运行实例。我们将稍后使用连接信息和CA证书。
连接代码演示
1.安装PHP和MQTT客户端
如果您的计算机上没有PHP环境,请关注official document安装PHP。然后,您可以使用Composer安装PHP-MQTT客户端。作曲家是PHP的依赖关系管理工具,可以管理您的PHP项目需求的所有依赖项。
composer require php-mqtt/client
2.导入MQTT依赖关系
要在PHP应用程序中使用PHP-MQTT客户端库,请在PHP文件中添加以下依赖关系:
require('vendor/autoload.php'); use \\PhpMqtt\\Client\\MqttClient; use \\PhpMqtt\\Client\\ConnectionSettings;
3.连接设置
要配置连接设置,您需要指定经纪人,端口,主题,客户端ID,用户名和密码。
$server = '******.emqxsl.com';
// TLS port
$port = 8883;
$clientId = rand(5, 15);
$username = 'emqxtest';
$password = '******';
$clean_session = false;
$connectionSettings = (new ConnectionSettings)
->setUsername($username)
->setPassword($password)
->setKeepAliveInterval(60)
->setConnectTimeout(3)
->setUseTls(true)
->setTlsSelfSignedAllowed(true);
请用您的EMQX连接信息和登录凭据替换连接参数。
- 经纪和端口:从服务器部署概述页面获取连接地址和端口信息。
- 主题:主题用于识别和区分不同的消息,形成MQTT消息路由的基础。
- 客户端ID:每个MQTT客户端都必须具有唯一的客户端ID。您可以调用PHP RAND函数以随机生成MQTT客户端ID。
- 用户名和密码:要建立客户端连接,请确保您提供正确的用户名和密码。下图显示了如何在服务器端的“身份验证和ACL-身份验证”下配置这些凭据。
4.使用TLS/SSL
连接到EMQX无服务器时,重要的是要注意,它依赖于多租户体系结构,这使多个用户能够共享一个EMQX群集。为了确保在此多租户环境中数据传输的安全性和可靠性,需要TLS。
启用TLS,在创建新的ConnectionSettings时使用setUsetls(true)。
$connectionSettings = (new ConnectionSettings)
->setUsername($username)
->setPassword($password)
->setKeepAliveInterval(60)
->setConnectTimeout(3)
->setUseTls(true)
->setTlsSelfSignedAllowed(true);
5.连接到经纪人
要建立连接并开始发送和接收消息,只需使用MQTT客户端的连接方法。
$mqtt = new MqttClient($server, $port, $clientId, MqttClient::MQTT_3_1_1);
$mqtt->connect($connectionSettings, $clean_session);
6.订阅
接下来,您可以订阅PHP/MQTT主题,并配置回调函数以处理接收到的消息。在这里,我们打印从订阅中获得的主题和消息:
$mqtt->subscribe('php/mqtt', function ($topic, $message) { printf("Received message on topic \[%s\]: %s\\n", $topic, $message); }, 0);
7.发布
创建有效负载,然后调用发布功能将消息发布到“ PHP/MQTT”主题。发布后,客户必须输入轮询状态以处理传入消息和重新召集队列。
$payload = array( 'from' => 'php-mqtt client', 'date' => date('Y-m-d H:i:s') ); $mqtt->publish('php/mqtt', json\_encode($payload), 0);
8.退订
使用以下代码退订主题。
$mqtt->unsubscribe('php/mqtt');
9.断开连接
断开连接,致电:
$mqtt->disconnect();
测试
运行MQTT经纪连接代码后,您应该看到客户端已成功连接,并且已发表和接收到没有问题的消息。
您也可以使用MQTT客户端工具MQTTX来测试连接。通过订阅MQTTX中的“ PHP/MQTT”主题,您还会收到PHP应用程序发布的消息。
当您将消息发布到PHP/MQTT
时
主题,您将看到该消息同时出现在MQTTX和控制台中。
完成代码
以下代码显示了如何连接到服务器,订阅主题以及发布和接收消息。有关所有功能的完整演示,请参见该项目的GitHub repository。
<?php
require('vendor/autoload.php');
use \PhpMqtt\Client\MqttClient;
use \PhpMqtt\Client\ConnectionSettings;
$server = 'qbc11278.ala.us-east-1.emqxsl.com';
// TLS port
$port = 8883;
$clientId = rand(5, 15);
$username = 'emqxtest';
$password = '123456';
$clean_session = false;
$connectionSettings = (new ConnectionSettings)
->setUsername($username)
->setPassword($password)
->setKeepAliveInterval(60)
->setConnectTimeout(3)
->setUseTls(true)
->setTlsSelfSignedAllowed(true);
$mqtt = new MqttClient($server, $port, $clientId, MqttClient::MQTT_3_1_1);
$mqtt->connect($connectionSettings, $clean_session);
$mqtt->subscribe('php/mqtt', function ($topic, $message) {
printf("Received message on topic [%s]: %s\n", $topic, $message);
}, 0);
$payload = array(
'from' => 'php-mqtt client',
'date' => date('Y-m-d H:i:s')
);
$mqtt->publish('php/mqtt', json_encode($payload), 0);
$mqtt->loop(true);
概括
此博客提供了有关连接到PHP中无服务器MQTT部署的分步指南。通过遵循这些说明,您已成功创建了一个能够发布和订阅无服务器MQTT的PHP应用程序。有关PHP中与MQTT brokers连接的更多方法,请参阅教程博客How to Use MQTT in PHP。
加入EMQ社区
要深入研究此主题,请探索Our GitHub repository获取源代码,加入我们的Discord进行讨论,并观看我们的YouTube tutorials进行动手学习。我们重视您的反馈和贡献,因此请随时参与其中并成为我们蓬勃发展的社区的一部分。保持联系并保持学习!
最初出版于www.emqx.com