MQTT est un protocole de communication « léger » basé sur le modèle de publication/abonnement. En tant que protocole de messagerie instantanée avec une faible surcharge et une faible utilisation de la bande passante, il est devenu un élément important de l'Internet des objets. Aujourd'hui, je vais vous montrer Apprendre. à propos de simps/mqtt.
MQTT est un protocole de communication « léger » basé sur le modèle de publication/abonnement (publication/abonnement), car un protocole de messagerie instantanée à faible surcharge et à faible bande passante est devenu une partie importante de l'Internet des objets
Swoole fournit également à PHP la possibilité de développer des projets Internet des objets. Il vous suffit de définir une option open_mqtt_protocol Après l'avoir activée, l'en-tête MQTT sera analysé. dans le processus Worker. L'événement onReceive renverra un paquet MQTT complet à chaque fois
Bien sûr, il y en a d'autres, comme la bibliothèque client asynchrone mqtt précédemment fournie par Workerman, et d'autres bibliothèques open source, que je ne ferai pas. présentez-les un par un ici
La première version de Simps de la bibliothèque MQTT fait référence à l'implémentation de Workerman, lui permettant d'utiliser les capacités de coroutine de Swoole, et corrige également certains problèmes
Je voudrais également merci @walkor pour cette contribution apportée par l'écosystème PHP
L'implémentation de la première version a été placée dans le framework, ce qui restreignait l'utilisation de certains utilisateurs. Nous avons donc commencé à refactoriser et séparé MQTT en une bibliothèque, ce qui a non seulement facilité son utilisation pour les utilisateurs, mais a également enrichi l'écosystème PHP, afin que les programmeurs PHP ne se limitent plus au développement Web
Après la sortie de la première version, Simps Il y a également de nombreux utilisateurs dans le groupe de communication qui posent des questions sur MQTT et ont également corrigé certains bugs associés. Désormais, l'utilisation de PHP + Swoole pour développer des projets liés à l'IoT devrait être encore plus puissante
À. en même temps, la première version de MQTT La bibliothèque ne prend en charge que MQTT 3.x et ne prend pas en charge MQTT 5.0. Il n'existe aucune bibliothèque de classes prise en charge pertinente trouvée sur GitHub, donc après avoir refactorisé la version 3.x, elle prend également en charge MQTT 5.0<.>
Peut-être que c'est la première bibliothèque PHP à prendre en charge le protocole MQTT v5.0...Prend en charge les versions 3.1, 3.1.1 et 5.0 du protocole MQTT, prend en charge QoS 0, QoS 1, QoS 2, puis ça arrive, utilisez composer pour installercomposer require simps/mqtt
include __DIR__ . '/vendor/autoload.php'; use Simps\MQTT\Hex\ReasonCode; use Swoole\Coroutine; use Simps\MQTT\Client; use Simps\MQTT\Types; $config = [ 'host' => 'broker.emqx.io', 'port' => 1883, 'time_out' => 5, 'user_name' => 'user001', 'password' => 'hLXQ9ubnZGzkzf', 'client_id' => Client::genClientID(), 'keep_alive' => 10, 'properties' => [ 'session_expiry_interval' => 60, 'receive_maximum' => 200, 'topic_alias_maximum' => 200, ], 'protocol_level' => 5, ]; Coroutine\run(function () use ($config) { $client = new Client($config, ['open_mqtt_protocol' => true, 'package_max_length' => 2 * 1024 * 1024]); while (!$data = $client->connect()) { Coroutine::sleep(3); $client->connect(); } $topics['simps-mqtt/user001/get'] = [ 'qos' => 1, 'no_local' => true, 'retain_as_published' => true, 'retain_handling' => 2, ]; $timeSincePing = time(); $res = $client->subscribe($topics); // 订阅的结果 var_dump($res); while (true) { $buffer = $client->recv(); if ($buffer && $buffer !== true) { $timeSincePing = time(); // 收到的数据包 var_dump($buffer); } if (isset($config['keep_alive']) && $timeSincePing < (time() - $config['keep_alive'])) { $buffer = $client->ping(); if ($buffer) { echo 'send ping success' . PHP_EOL; $timeSincePing = time(); } else { $client->close(); break; } } // QoS1 发布回复 if ($buffer['type'] === Types::PUBLISH && $buffer['qos'] === 1) { $client->send( [ 'type' => Types::PUBACK, 'message_id' => $buffer['message_id'], 'code' => ReasonCode::SUCCESS ] ); } } });
array(3) { ["type"]=> int(9) ["message_id"]=> int(1) ["codes"]=> array(1) { [0]=> int(1) } }
include __DIR__ . '/vendor/autoload.php'; use Swoole\Coroutine; use Simps\MQTT\Client; $config = [ 'host' => 'broker.emqx.io', 'port' => 1883, 'time_out' => 5, 'user_name' => 'user002', 'password' => 'adIJS1D482sd', 'client_id' => Client::genClientID(), 'keep_alive' => 20, 'properties' => [ 'session_expiry_interval' => 60, 'receive_maximum' => 200, 'topic_alias_maximum' => 200, ], 'protocol_level' => 5, ]; Coroutine\run(function () use ($config) { $client = new Client($config, ['open_mqtt_protocol' => true, 'package_max_length' => 2 * 1024 * 1024]); while (!$client->connect()) { Coroutine::sleep(3); $client->connect(); } while (true) { $response = $client->publish( 'simps-mqtt/user001/get', '{"time":' . time() . '}', 1, 0, 0, ['topic_alias' => 1] ); var_dump($response); Coroutine::sleep(3); } });
array(4) { ["type"]=> int(4) ["message_id"]=> int(1) ["code"]=> int(0) ["message"]=> string(7) "Success" }
array(8) { ["type"]=> int(3) ["topic"]=> string(0) "" ["message"]=> string(19) "{"time":1608017156}" ["dup"]=> int(1) ["qos"]=> int(1) ["retain"]=> int(0) ["message_id"]=> int(4) ["properties"]=> array(1) { ["topic_alias"]=> int(1) } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!