1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/JesusSlim-mqttclient

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

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).

Разница:

  • Разница в требованиях.
  • У swoole есть ошибка разделения пакетов и ошибка сбоя. Мы должны обработать это исключение, например, отслеживать идентификатор процесса и перезапускать при сбое или получении ошибочного пакета.
  • Клиент swoole может подписываться и публиковать сообщения в одном клиенте, при использовании mosquitto нам нужно два клиента.
  • Некоторая разница в грамматике между swoole и mosquitto.

Пример на основе mosquitoo

Определите свой логгер:

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, чтобы получать сообщения, которые необходимо отправить в цикле.

Пример на основе swoole (устаревший)

Определите свой логгер:

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 )

Вы можете оставить комментарий после Вход в систему

Введение

MQTT-клиент на PHP. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/JesusSlim-mqttclient.git
git@api.gitlife.ru:oschina-mirror/JesusSlim-mqttclient.git
oschina-mirror
JesusSlim-mqttclient
JesusSlim-mqttclient
master