>  기사  >  PHP 프레임워크  >  Swoole과 MQTT 프로토콜을 결합하는 구현 방법

Swoole과 MQTT 프로토콜을 결합하는 구현 방법

WBOY
WBOY원래의
2023-06-25 11:00:342136검색

사물인터넷이 발전하면서 실시간 데이터 전송과 통신이 필요한 애플리케이션이 점점 더 많아지고 있습니다. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.