PHP에서 MQTT를 사용하는 방법
15365 단어 tutorialphpmqttprogramming
이 기사는 PHP 프로젝트에서
php-mqtt/client
클라이언트 라이브러리를 사용하여 MQTT client과 MQTT server 사이의 연결, 구독, 구독 취소, 메시지 수신 및 전송 기능을 구현하는 방법을 주로 소개합니다.MQTT 클라이언트 라이브러리 선택
이 기사에서는 컴포저에서 가장 많이 다운로드되는 클라이언트 라이브러리
php-mqtt/client
를 선택합니다. 더 많은 PHP-MQTT 클라이언트 라이브러리는 Packagist-Search MQTT에서 확인하십시오.php-mqtt/client에 대한 자세한 내용은 Packagist php-mqtt/client을 참조하십시오.
MQTT 통신은 HTTP 시스템 외부의 네트워크 통신 시나리오에 속합니다. PHP 특성의 한계로 인해 PHP 시스템에서 Swoole/Workerman과 같은 네트워크 통신을 위한 확장을 사용하면 더 나은 경험을 얻을 수 있습니다. 이 문서에서는 해당 사용을 반복하지 않습니다. 관련 MQTT 클라이언트 라이브러리는 다음과 같습니다.
workerman/mqtt :workerman 기반의 PHP용 비동기식 MQTT 클라이언트.
simps/mqtt : MQTT protocol 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 서버에 연결
이 기사에서는 EMQX의 Free Public MQTT Server에서 생성된 EMQX에서 제공하는 MQTT Cloud Service을 사용합니다. 서버 접속 정보는 다음과 같습니다.
Composer 자동 로드 파일 및 php-mqtt/client 가져오기
require('vendor/autoload.php');
use \PhpMqtt\Client\MqttClient;
MQTT 브로커 연결 매개변수 설정
MQTT Broker 연결 주소, 포트 및 주제를 설정합니다. 동시에 PHP
rand
함수를 호출하여 임의로 MQTT 클라이언트 ID를 생성합니다.$server = 'broker.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)
->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);
게시
페이로드를 구성하고
publish
함수를 호출하여 emqx/test
주제에 메시지를 게시합니다. 게시 후 클라이언트는 수신 메시지와 재전송 대기열을 처리하기 위해 폴링 상태를 입력해야 합니다.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);
완전한 코드
서버 연결, 메시지 게시 및 수신 코드.
<?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 = null;
$clean_session = false;
$connectionSettings = new ConnectionSettings();
$connectionSettings
->setUsername($username)
->setPassword(null)
->setKeepAliveInterval(60)
->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);
테스트
MQTT 메시지 게시 코드를 실행한 후 클라이언트가 성공적으로 연결되고 메시지가 하나씩 게시되고 성공적으로 수신되었음을 확인할 수 있습니다.
php pubsub_tcp.php
요약
지금까지 php-mqtt/client를 사용하여 public MQTT server에 연결하고 테스트 클라이언트와 MQTT 서버 간의 연결, 메시지 게시 및 구독을 구현했습니다.
Reference
이 문제에 관하여(PHP에서 MQTT를 사용하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/emqx/how-to-use-mqtt-in-php-5dk6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)