MQTT для Yii2 на основе Swoole 4
MQTT-сервер для Yii2, основанный на Swoole 4, разрешает тему как маршрут, ведущий к контроллеру/действию/параметру, и поддерживает Redis pub/sub для запуска асинхронной задачи из вашего веб-приложения.
Установка
Установите Yii2: Yii2.
Установите Swoole: Swoole, рекомендуется версия 4+.
Другие зависимости: расширение PHP-Redis.
Предпочтительный способ установки этого расширения — через composer.
Либо запустите:
php composer.phar require --prefer-dist immusen/yii2-swoole-mqtt "~1.0"
либо добавьте:
"immusen/yii2-swoole-mqtt": "~1.0"
в раздел require файла composer.json
.
Тестирование или использование
После установки перейдите в корневой каталог проекта, например, cd yii2-advanced-project/
Переименуйте файлы:
mv vendor/immusen/yii2-swoole-mqtt/example/mqtt ./
mv vendor/immusen/yii2-swoole-mqtt/example/mqtt-server ./
Дайте права на выполнение файлу ./mqtt-server
:
chmod a+x ./mqtt-server
Запустите:
./mqtt-server
Конфигурация:
Просмотрите файл ./mqtt/config/params.php
:
return [
'listen' => 8721,
'daemonize' => 0,
'auth' => 1, // config auth class in ./main.php
];
или напишите код в файле ./mqtt/controllers/
Тестовый клиент: MQTTLens, MQTT.fx
Пример:
Случай A: Подписка/Публикация
- Клиент MQTT подписывается на тему: room/count/100011
2.1. Клиент MQTT публикует: каждый раз, когда публикуется тема: room/join/100011, сторона подписки получает count+1, или публикуется тема: room/leave/100011 и получает count -1.
2.2. Клиент Redis публикует: каждый раз $redis->publish('async', 'room/join/100011'), сторона подписки получает count+1, или $redis->publish('async', 'room/leave/100011') получает count -1.
Случай B: Публикация (уведомление или отчёт)
Клиент MQTT публикует тему: report/coord/100111 с полезной нагрузкой: например, 110.12345678,30.12345678,0,85
Кодирование:
Подписка на тему MQTT: channel/count/100001 обрабатывается в:
class ChannelController{
public function actionCount($channel_id){
echo "client {$this->fd} subscribed the count change of channel {$channel_id}";
}
}
//клиент 1 подписался на изменение количества каналов 100001
Публикация темы MQTT: channel/join/100001 с полезной нагрузкой: «Foo» обрабатывается в:
class ChannelController{
public function actionJoin($channel_id, $who){
echo "{$who} join in channel {$channel_id}";
#затем транслировать обновление всем клиентам, которые подписались на канал 100001
#$this->publish($fds, $sub_topic, $count);
}
}
// Foo присоединяется к каналу 100001
О MQTT: MQTT Version 3.1.1 Plus Errata 01
Неполная реализация MQTT 3.1.1 в этом проекте, обновление...
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )