>백엔드 개발 >PHP 튜토리얼 >PHP 프로젝트에서 MQTT를 사용하는 방법을 빠르게 이해하는 기사 1개

PHP 프로젝트에서 MQTT를 사용하는 방법을 빠르게 이해하는 기사 1개

青灯夜游
青灯夜游앞으로
2021-09-03 19:16:316522검색

PHP 프로젝트에서 MQTT를 사용하는 방법을 빠르게 이해하는 기사 1개

PHP는 널리 사용되는 오픈 소스 다목적 스크립팅 언어로 HTML에 포함될 수 있으며 특히 웹 개발에 적합합니다.

이 글에서는 주로 PHP 프로젝트에서 php-mqtt/client 클라이언트 라이브러리를 사용하여 php-mqtt/client 客户端库 ,实现 MQTT 客户端MQTT 服务器的连接、订阅、取消订阅、收发消息等功能。

MQTT 客户端库选择

本文选择了 composer 上下载量最高的 php-mqtt/client 这个客户端库,更多 PHP-MQTT 客户端库可以在 Packagist - Search MQTT 中查看。

有关 php-mqtt/client 更多使用文档请参阅 Packagist php-mqtt/client

MQTT 通信属于 HTTP 体系之外的网络通信场景,由于 PHP 特性限制,使用 PHP 体系中的 Swoole/Workerman 等专为网络通信打造的拓展可以带来更好的体验,其使用本文不再赘述,相关的 MQTT 客户端库如下:

  • workerman/mqtt:Asynchronous MQTT client for PHP based on workerman.
  • simps/mqtt:MQTT Protocol Analysis and Coroutine Client for PHP.

项目初始化

确认 PHP 版本

本项目使用 7.4.21 进行开发测试,读者可用如下命令确认 PHP 的版本。

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 安装 php-mqtt/client 客户端

Composer 是 PHP 的一个依赖管理工具,它能管理你的 PHP 项目所需要的所有依赖关系。

composer require php-mqtt/client

PHP MQTT 使用

连接 MQTT 服务器

本文将使用 EMQ X 提供的 免费公共 MQTT 服务器,该服务基于 EMQ X 的 MQTT 物联网云平台 创建。服务器接入信息如下:

  • Broker: broker-cn.emqx.io
  • TCP Port: 1883
  • SSL/TLS Port: 8883

导入 composer autoload 文件和 php-mqtt/client

require('vendor/autoload.php');

use \PhpMqtt\Client\MqttClient;

设置 MQTT Broker 连接参数

设置 MQTT Broker 连接地址,端口以及 topic,同时我们调用 PHP rand 函数随机生成 MQTT 客户端 id。

$server   = 'broker-cn.emqx.io';
$port     = 1883;
$clientId = rand(5, 15);
$username = 'emqx_user';
$password = null;
$clean_session = false;

编写 MQTT 连接函数

使用上述的参数进行连接,通过 ConnectionSettings 设置连接参数,比如

$connectionSettings  = new ConnectionSettings();$connectionSettings
  ->setUsername($username)
  ->setPassword(null)
  ->setKeepAliveInterval(60)  // Last Will 设置
  ->setLastWillTopic('emqx/test/last-will')
  ->setLastWillMessage('client disconnect')
  ->setLastWillQualityOfService(1);复制代码

订阅消息

编写代码订阅 emqx/test 主题,并为该订阅配置回调函数以处理接收到的消息,此处我们将订阅得到的主题和消息打印出来:

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

发布消息

构造一个 payload,调用 publish 函数向 emqx/test ="_blank" ref="nofollow noopener noreferrer">MQTT 서버

의 연결, 구독, 구독 취소, 메시지 보내기 및 받기 등의 기능

MQTT 클라이언트 라이브러리 선택

이 문서에서는 Composer에서 가장 많이 다운로드된 php-mqtt/client 클라이언트 라이브러리를 선택합니다. PHP-MQTT 클라이언트 라이브러리는 Packagist - Search MQTT

에서 볼 수 있습니다.

php-mqtt/client에 대한 자세한 사용 문서는 를 참조하세요. 패키지스트 PHP -mqtt/client.

MQTT 통신은 HTTP 시스템 외부의 네트워크 통신 시나리오입니다. PHP 기능의 한계로 인해 PHP 시스템에서 Swoole/Workerman과 같이 네트워크 통신용으로 특별히 설계된 확장을 사용하면 더 나은 경험을 제공할 수 있습니다. 관련 MQTT 클라이언트 라이브러리는 다음과 같습니다.

프로젝트 초기화

PHP 버전 확인

이 프로젝트는 개발 및 테스트용으로 7.4.21을 사용합니다. 독자는 다음 명령을 사용하여 PHP 버전을 확인할 수 있습니다.

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

// 客户端轮询以处理传入消息和重发队列
$mqtt->loop(true);

Composer를 사용하여 php-mqtt/client 클라이언트 설치
Composer는 PHP 프로젝트에 필요한 모든 종속성을 관리할 수 있는 PHP용 종속성 관리 도구입니다.

setUsername($username)
  ->setPassword(null)
  ->setKeepAliveInterval(60)
  // Last Will 设置
  ->setLastWillTopic('emqx/test/last-will')
  ->setLastWillMessage('client disconnect')
  ->setLastWillQualityOfService(1);


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

$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);

PHP MQTT는

🎜를 사용하여 MQTT 서버에 연결합니다. 🎜🎜🎜이 기사에서는 🎜무료 공개를 사용합니다. EMQ X Server 🎜에서 제공하는 MQTT, 이 서비스는 EMQ를 기반으로 만들어졌습니다. 서버 접속 정보는 다음과 같습니다. 🎜
  • 브로커: 🎜broker-cn.emqx.io🎜
  • TCP 포트: 🎜1883🎜
  • SSL/TLS 포트 : 🎜 8883🎜

🎜작성기 자동 로드 파일 가져오기 및 php-mqtt/client🎜

php pubsub_tcp.php

🎜MQTT 브로커 연결 매개변수 설정🎜

🎜MQTT 브로커 연결 주소, 포트 및 주제를 설정하는 동시에 PHP rand 함수를 호출하여 MQTT를 무작위로 생성합니다. 클라이언트 ID. 🎜rrreee

🎜MQTT 연결 기능 쓰기🎜

🎜위 매개변수를 사용하여 연결하고, ConnectionSettings를 통해 연결 매개변수를 설정합니다. 예: 🎜 rrreee

🎜메시지 구독🎜🎜🎜 emqx/test 주제를 구독하는 코드를 작성하고 수신된 메시지를 처리하도록 구독에 대한 콜백 함수를 구성합니다. . 여기에서 구독하겠습니다. 획득한 주제와 메시지를 인쇄합니다. 🎜rrreee

🎜메시지 게시🎜🎜🎜페이로드를 구성하고 publish 함수를 호출합니다. code>emqx/test 주제가 메시지를 게시한 후 클라이언트는 수신 메시지를 처리하고 대기열을 다시 보내기 위해 폴링 상태로 들어가야 합니다. 🎜rrreee🎜🎜전체 코드🎜🎜🎜서버 연결, 메시지 코드 게시 및 수신. 🎜rrreee🎜🎜Test🎜🎜🎜MQTT 메시지 게시 코드를 실행하면 클라이언트가 성공적으로 연결되었으며 메시지가 하나씩 게시되어 성공적으로 수신되었음을 확인할 수 있습니다. 🎜rrreee🎜🎜🎜🎜🎜Summary🎜🎜🎜At 이제 🎜php-mqtt/client🎜 사용이 완료되었습니다. 클라이언트는 🎜공개 MQTT 서버🎜에 연결하고 테스트 클라이언트와 MQTT 서버 간의 연결, 메시지 게시 및 구독을 구현합니다. 🎜🎜🎜원본 링크: https://www.emqx.com/zh/blog/how-to-use-mqtt-in-php🎜🎜저자: EMQ🎜

추천 학습: "PHP 비디오 튜토리얼"

위 내용은 PHP 프로젝트에서 MQTT를 사용하는 방법을 빠르게 이해하는 기사 1개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 juejin.cn에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제