workerman/mqtt
MQTTは、クライアントサーバーアーキテクチャを持つ、パブリッシュ/サブスクライブパターンのメッセージングプロトコルであり、すでにIoTの重要な構成要素となっています。その設計思想は、軽量、オープン、簡単、標準化されており、実装が容易です。これらの特性により、多くのシナリオにとって適しており、特にM2M通信やIoT環境などの制約のある環境にとって非常に適しています。
workerman\mqtt は、workermanをベースにした非同期mqttクライアントライブラリで、mqttプロトコルのメッセージの受信または送信に使用できます。QoS 0
、QoS 1
、QoS 2
をサポートしています。MQTT
3.1
3.1.1
5
バージョンをサポートしています。
プロジェクトURL
https://github.com/walkor/mqtt
インストール
composer require workerman/mqtt
例
subscribe.php
<?php
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker();
$worker->onWorkerStart = function(){
$mqtt = new Workerman\Mqtt\Client('mqtt://test.mosquitto.org:1883');
$mqtt->onConnect = function($mqtt) {
$mqtt->subscribe('test');
};
$mqtt->onMessage = function($topic, $content){
var_dump($topic, $content);
};
$mqtt->connect();
};
Worker::runAll();
コマンドラインでphp subscribe.php start
を実行して起動します。
publish.php
<?php
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker();
$worker->onWorkerStart = function(){
$mqtt = new Workerman\Mqtt\Client('mqtt://test.mosquitto.org:1883');
$mqtt->onConnect = function($mqtt) {
$mqtt->publish('test', 'hello workerman mqtt');
};
$mqtt->connect();
};
Worker::runAll();
コマンドラインでphp publish.php start
を実行して起動します。
workerman\mqtt\Client Interface
Client::__construct()
Client::connect()
Client::publish()
Client::subscribe()
Client::unsubscribe()
Client::disconnect()
Client::close()
callback onConnect
callback onMessage
callback onError
callback onClose
__construct (string $address, [array $options])
mqttクライアントインスタンスの作成。
-
$address
mqttサーバーアドレス、フォーマットは 'mqtt://test.mosquitto.org:1883' -
$options
クライアントオプション配列で、以下のオプションを設定できます:keepalive
: クライアントがサーバーに定期的に心拍を送信する間隔、デフォルトは50秒で、0に設定すると心拍を送信しなくなりますclient_id
: クライアントID、未設定の場合は"workerman-mqtt-client-".mt_rand()
になりますprotocol_name
: プロトコル名、MQTT
(3.1.1バージョン)またはMQIsdp
(3.1バージョン)、デフォルトはMQTT
protocol_level
: プロトコルレベル、protocol_name
がMQTT
の場合は4
、protocol_name
がMQIsdp
の場合は3
clean_session
: クリーンセッション、デフォルトはtrue
。false
に設定すると、QoS 1
およびQoS 2
レベルのオフラインメッセージを受信できます。reconnect_period
: 再接続間隔、デフォルトは1
秒、0
は再接続しないことを表しますconnect_timeout
: mqtt接続のタイムアウト、デフォルトは30
秒username
: ユーザー名、オプションpassword
: パスワード、オプションwill
: 遺言メッセージ、クライアントが切断された後、ブローカーは自動的に遺言メッセージを他のクライアントに送信します。以下の形式です:topic
: トピックcontent
: コンテンツqos
:QoS
レベルretain
:retain
フラグ
resubscribe
: 接続が異常終了し、再接続後に以前のトピックを再購読するかどうかbindto
ローカルIPとポートを指定してBrokerに接続するために使用される、デフォルトは''ssl
sslオプション、デフォルトはfalse
、true
に設定するとssl接続になります。同時に、ローカル証明書の構成など、sslコンテキスト配列を渡すこともサポートしており、sslコンテキストについてはhttps://php.net/manual/en/context.ssl.phpを参照してくださいdebug
デバッグモードを有効にするかどうか、デフォルトはfalse
connect()
ブローカーに接続します。
publish(string $topic, string $content, [array $options], [callable $callback])
特定のトピックにメッセージを公開します。
$topic
トピック$content
メッセージ$options
オプション配列、含まれるものqos
QoS
レベル、デフォルトは0
retain
retainフラグ、デフォルトはfalse
dup
重複フラグ、デフォルトはfalse
$callback
-function (\Exception $exception = null)
、(QoSが0の場合、この設定はサポートされません)エラーが発生した場合や成功した場合にトリガーされます、$exception
は例外オブジェクトであり、エラーが発生しない場合は$exception
はnull
になります。下記も同様です。
subscribe(mixed $topic, [array $options], [callable $callback])
1つまたは複数のトピックを購読します。
$topic
は文字列(1つのトピックを購読する場合)または配列(複数のトピックを購読する場合)です。
複数のトピックを購読する場合、$topic
はトピックがキーで、QoS
が値の配列です。例:array('topic1'=> 0, 'topic2'=> 1)
$options
購読オプション配列、以下の設定が含まれます:qos
QoS
レベル、デフォルトは0
$callback
-function (\Exception $exception = null, array $granted = [])
、購読が成功するかエラーが発生した場合にトリガーされます。exception
例外オブジェクト、エラーがない場合はnull
です
unsubscribe(mixed $topic, [callable $callback])
購読を解除します。
$topic
は1つまたは複数の文字列で、例:array('topic1', 'topic2')
$callback
-function (\Exception $e = null)
、成功または失敗した場合にトリガーされるコールバック関数
disconnect()
ブローカーとの接続を正常に切断します。 DISCONNECT
メッセージがブローカーに送信されます。
close()
ブローカーとの接続を強制的に切断します。ブローカーにはDISCONNECT
メッセージが送信されません。
callback onConnect(Client $mqtt)
ブローカーとの接続が確立されると、トリガーされます。この時点で、ブローカーから CONNACK
メッセージを受信します。
callback onMessage(string $topic, string $content, Client $mqtt)
function (topic, message, packet) {}
クライアントがPublishメッセージを受信した際にトリガーされます。
$topic
受信したトピック$content
受信したメッセージの内容$mqtt
mqttクライアントインスタンス
callback onError(\Exception $exception = null)
接続時にエラーが発生した場合にトリガーされます
callback onClose()
接続が閉じられると、クライアントが自発的に閉じる場合やサーバーが閉じる場合にトリガーされます。