사물인터넷이 발전하면서 실시간 데이터 전송과 통신이 필요한 애플리케이션이 점점 더 많아지고 있습니다. MQTT(Message Queuing Transport Protocol)는 소형 장치 및 낮은 대역폭 환경에 적합한 경량 프로토콜이며 IoT 장치의 데이터 전송에 자주 사용됩니다. 고성능, 비동기식, 이벤트 기반 네트워크 통신 프레임워크인 Swoole은 TCP/UDP/UnixSocket 프로토콜의 효율적인 구현을 제공하며 MQTT 프로토콜과 함께 사용하여 보다 효율적인 시스템 통신을 제공할 수 있습니다.
이 글에서는 Swoole 및 MQTT 프로토콜을 사용하여 통신하는 방법을 소개하고 실현 가능한 솔루션을 제공합니다.
먼저 MQTT 프로토콜에 대한 기본 지식을 이해해야 합니다. 장치 간 양방향 통신을 가능하게 하는 게시/구독 모델을 기반으로 하는 프로토콜입니다. MQTT 프로토콜에는 게시자와 구독자라는 두 가지 주요 역할이 있습니다. 게시자는 주제에 메시지를 게시하고, 구독자는 관심 있는 주제를 구독하고 게시자가 게시한 메시지를 실시간으로 받을 수 있습니다. MQTT 프로토콜에서 주제는 게시/구독에 대한 식별자인 문자열로 정의됩니다.
다음으로 Swoole 프레임워크를 사용하여 MQTT 프로토콜의 게시/구독 모델을 구현하겠습니다.
Swoole을 사용하여 MQTT 프로토콜을 구현하기 전에 MQTT 라이브러리를 설치해야 합니다. Swoole은 MQTT 통신을 위해 php-mqtt 라이브러리를 사용할 수 있으며 작곡가를 사용하여 이를 설치할 수 있습니다.
composer require bluerhinos/phpmqtt dev-master
설치가 성공적으로 완료되면 Swoole을 사용하여 MQTT 프로토콜과 통신할 수 있습니다.
먼저 Swoole 프레임워크를 기반으로 TCP 서버를 만들어야 합니다. 이 TCP 서버에서는 데이터 전송을 위해 MQTT 프로토콜을 사용합니다. Swoole 프레임워크에서는 다음 코드를 통해 TCP 서버를 생성할 수 있습니다.
$server = new SwooleServer('0.0.0.0', 9501, SWOOLE_PROCESS, SWOOLE_SOCK_TCP);
다음으로 클라이언트 요청을 처리할 수 있도록 서버가 시작될 때 서비스 후크를 등록해야 합니다. 이 예에서는 onConnect, onReceive 및 onClose 메소드를 사용합니다.
$server->on('connect', function ($serv, $fd) { echo "Client: Connect. "; }); $server->on('receive', function ($serv, $fd, $from_id, $data) { echo "Receive Data: $data "; // 处理MQTT消息 }); $server->on('close', function ($serv, $fd) { echo "Client: Close. "; });
클라이언트 요청을 받으면 MQTT 메시지를 구문 분석합니다. 이 기사의 초점은 Swoole을 사용하여 MQTT 프로토콜을 구현하는 방법이므로 MQTT 메시지를 구문 분석하는 방법에만 중점을 둡니다. MQTT 메시지는 php-mqtt 라이브러리를 사용하여 쉽게 구문 분석할 수 있습니다.
function handleMqttMessage($client_id, $topic, $message) { echo "Mqtt Message Received: "; echo "Client ID: $client_id "; echo "Topic: $topic "; echo "Message: $message "; }
남은 작업은 MQTT 메시지의 구문 분석된 데이터를 수신하려는 클라이언트에 보내는 것입니다. MQTT 프로토콜에서는 게시/구독 모드를 사용하여 통신하여 지정된 주제에 메시지를 게시할 수 있습니다. 클라이언트는 관심 있는 주제를 구독한 다음 해당 주제에 게시된 메시지를 받을 수 있습니다. Swoole 프레임워크에서는 swoole_server->task()를 사용하여 특정 클라이언트에 메시지를 보낼 수 있습니다.
다음 코드는 MQTT 메시지를 수신한 후 해당 주제를 구독하는 모든 클라이언트에게 메시지를 보내는 코드입니다.
$server->on('receive', function ($serv, $fd, $from_id, $data) { $mqtt = new BluerhinosphpMQTT('localhost', 1883, 'Swoole_Server'); $mqtt->debug = false; if (!$mqtt->connect()) { exit(1); } $topics['topic_name'] = array('qos' => 0, 'function' => 'handleMqttMessage'); $mqtt->subscribe($topics, 0); while ($mqtt->proc()) { }; $mqtt->close(); echo "Receive Data: $data "; $data = json_decode($data, true); $message = $data['message']; $client_ids = $serv->getClientList(); foreach ($client_ids as $client_id) { $serv->task("$client_id:$message"); } });
클라이언트 메시지가 수신될 때마다 콜백 메소드인 handlerMqttMessage(()를 호출한 후 지정된 클라이언트에게 메시지를 보냅니다.
마지막으로 작업 이벤트에서 클라이언트에 메시지를 보내야 합니다.
$server->on('task', function ($serv, $task_id, $from_id, $data) { $client_id = strstr($data, ':', true); $message = substr(strstr($data, ':'), 1); $serv->send($client_id, $message); });
위 코드는 클라이언트에 메시지를 보내고 전송에 성공한 후 해당 ACK 메시지를 반환합니다.
요약
이번 글에서는 Swoole을 사용하여 MQTT 프로토콜을 구현하는 방법을 알아보았습니다. 이러한 방식으로 우리는 효율적인 실시간 통신을 달성하고 비동기식 이벤트 중심 접근 방식을 사용하여 클라이언트 요청을 더 잘 처리할 수 있습니다. Swoole 프레임워크는 효율적인 TCP/UDP/UnixSocket 프로토콜 구현을 제공하며 이는 대기업과 소규모 프로젝트 모두에 많은 이점을 제공합니다. 앞으로는 더 많은 애플리케이션이 데이터 전송 및 통신에 Swoole 및 MQTT 프로토콜을 사용할 것으로 예상됩니다.
위 내용은 Swoole과 MQTT 프로토콜을 결합하는 구현 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!