PHP mqtt client
[English] Chinese
Установить:
composer require jesusslim/mqttclient
Если вашему composer не разрешено использовать dev-master, добавьте эту конфигурацию в ваш composer.json:
"minimum-stability": "dev"
swoole 2.0.8+(swoole.so)
mosquitto.so
Существует MqttClient, который мы можем использовать. Один основан на swoole (см. пример swoole, устаревший), другой — на mosquitto (см. пример mosquitto).
Разница:
Определите свой логгер:
class Logger implements \mqttclient\src\swoole\MqttLogInterface {
public function log($type,$content,$params = []){
echo "$type : $content \r\n";
}
}
Используйте Mqttclient:
$host = '127.0.0.1';
$port = 1883;
$r = new \mqttclient\src\mosquitto\MqttClient($host,$port,10017);
$r->setAuth('username','password');
$r->setKeepAlive(60);
$r->setLogger(new Logger());
$r->setMaxReconnectTimesWhenError(360*12);
// интервал повторного подключения
$r->setReconnectInterval(10);
// подписка на темы, параметры обратного вызова могут быть любыми данными, которые мы сопоставили с контейнером (IOC)
$r->setTopics(
[
new \mqttclient\src\subscribe\Topic('test/slim',function($msg){
echo "Я получаю:".$msg."\r\n";}),
new \mqttclient\src\subscribe\Topic('test/slim3',function(\mqttclient\src\swoole\MqttClient $client,$msg){
echo "Я получаю:".$msg." для slim3 \r\n";
echo $client->getClientId();
})
]
);
// установить триггер
$r->on(\mqttclient\src\consts\ClientTriggers::SOCKET_CONNECT,function(){
// что-то сделать
});
$r->start();
Отправитель:
$host = '127.0.0.1';
$port = 1883;
$r = new \mqttclient\src\mosquitto\MqttSender($host,$port,10017);
$r->setAuth('username','password');
$r->setKeepAlive(60);
$r->setLogger(new Logger());
$r->setMaxReconnectTimesWhenError(360*12);
// интервал повторного подключения
$r->setReconnectInterval(10);
$r->setQueue(new Queue());
$r->start();
Требуется очередь, реализующая mqttclient\src\mosquitto\MqttSendingQueue, чтобы получать сообщения, которые необходимо отправить в цикле.
Определите свой логгер:
class Logger implements \mqttclient\src\swoole\MqttLogInterface {
public function log($type,$content,$params = []){
echo "$type : $content \r\n";
}
}
Определите своё временное хранилище (используйте Redis/Memory/...):
class Store implements \mqttclient\src\swoole\TmpStorageInterface{
private $data = [];
public function set($message_type, $key, $sub_key, $data, $expire = 3600)
{
$this->data[$message_type][$key][$sub_key] = $data;
}
public function get($message_type, $key, $sub_key)
{
return $this->data[$message_type][$key][$sub_key];
}
public function delete($message_type, $key, $sub_key)
{
if (!isset($this->data[$message_type][$key][$sub_key])){
echo "storage not found:$message_type $key $sub_key";
}
unset($this->data[$message_type][$key][$sub_key]);
}
}
Использовать MqttClient:
$host = '127.0.0.1';
$port = 1883;
$r = new \mqttclient\src\swoole\MqttClient($host,$port,10017);
$r->setAuth('username','password');
$r->setKeepAlive(60);
$r->setLogger(new Logger());
$r->setStore(new Store());
// поиск DNS
$r->setDnsLookup(true);
// размер буфера
$r->setSocketBufferSize(1024*1024*5);
// максимальное количество повторных подключений при ошибке
$r->setMaxReconnectTimesWhenError(360*12);
// интервал повторного подключения
$r->setReconnectInterval(10000);
// подписаться на темы, параметры обратного вызова **Текст запроса:**
can be any data we mapped into the container(IOC) $r->setTopics( [ new \mqttclient\src\subscribe\Topic('test/slim',function($msg){ echo "I receive:".$msg."\r\n";}), new \mqttclient\src\subscribe\Topic('test/slim3',function(\mqttclient\src\swoole\MqttClient $client,$msg){ echo "I receive:".$msg." for slim3 \r\n"; echo $client->getClientId(); }) ] );
//set trigger
$r->on(\mqttclient\src\consts\ClientTriggers::RECEIVE_SUBACK,function(\mqttclient\src\swoole\MqttClient $client){
$client->publish('slim/echo','GGXX',\mqttclient\src\consts\Qos::ONE_TIME);
});
$r->connect();
$r->publish('test/slim','test qos',2);
Перевод текста запроса на русский язык:
Можно использовать любые данные, которые мы сопоставили с контейнером (IOC). $r->setTopics( [ новый \mqttclient\src\subscribe\Topic('тест/тонкий', функция ($msg) { эхо "Я получаю:". $msg. "\r\n"; }), новый \mqttclient\src\subscribe\Topic('тест/тонкий3', функция (\mqttclient\src\swoole\MqttClient $клиент, $msg) { эхо "Я получаю:". $msg. " для slim3 \r\n"; эхо $клиент-> getClientId (); }) ]);
// установить триггер
$r->on (\mqttclient\src\consts\ClientTriggers :: RECEIVE_SUBACK, функция (\mqttclient\src\swoole\MqttClient $ клиент) {
$клиент-> publish ('тонкий / эхо', 'GGXX', \mqttclient\src\consts\ Qos :: ONE_TIME);
});
$ r-> connect ();
$ r-> publish ('тест / тонкий', 'тест qos', 2);
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )