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

OSCHINA-MIRROR/imiphp-imi-mqtt

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

imi-mqtt

Введение

В рамках imi-фреймворка разработан MQTT-сервер и встроен MQTT-клиент.

MQTT — это основанный на клиент-серверном взаимодействии протокол передачи сообщений, который характеризуется лёгкостью, простотой, открытостью и лёгкостью реализации. Эти особенности делают его широко применимым в различных областях, включая ограниченные среды, такие как M2M-коммуникации и IoT. Он широко используется в таких областях, как связь через спутниковые каналы с датчиками, периодически подключаемые медицинские устройства, умные дома и некоторые компактные устройства.

Composer

Этот проект можно установить с помощью Composer, следуя правилам автоматической загрузки PSR-4. В вашем файле composer.json добавьте следующее:

{
    "require": {
        "imiphp/imi-mqtt": "^1.0.0"
    }
}

Затем выполните команду composer update для установки.

Использование

Можно обратиться к примерам в каталогах example и tests.

Файл конфигурации проекта:

[
    'components'    =>  [
        'MQTT'  =>  'Imi\MQTT',
    ],
]

MQTT-пакеты данных

imi-mqtt разработан на основе binsoul/net-mqtt, и все используемые структуры данных пакетов взяты из этого пакета.

Имена классов обычно имеют вид BinSoul\Net\Mqtt\Packet\XXX.

Например, \BinSoul\Net\Mqtt\Packet\SubscribeRequestPacket.

Разработка MQTT-сервера

Во-первых, конфигурация сервера должна быть установлена как «MQTT», и контроллер должен быть правильно настроен.

Контроллер должен наследовать от класса Imi\Server\MQTT\BaseMQTTController и реализовывать методы.

Если вы являетесь главным сервером, настройте следующим образом:

'mainServer'    =>    [
    'namespace'     =>    'ImiApp\MQTTServer',
    'type'          =>    'MQTT',
    'host'          =>    '127.0.0.1',
    'port'          =>    8081,
    'controller'    =>  \ImiApp\MQTTServer\Controller\MQTTController::class,
    // 'configs'       =>    [
    //     // 启用 MQTTS 配置证书
    //     'ssl_cert_file'     =>  dirname(__DIR__) . '/ssl/server.crt',
    //     'ssl_key_file'      =>  dirname(__DIR__) . '/ssl/server.key',
    // ],
],

Если вы являетесь подчинённым сервером, настройте следующим образом:

// 子服务器(端口监听)配置
'subServers'        =>    [
    'xxxServer'    =>    [
        'namespace'     =>    'ImiApp\MQTTServer',
        'type'          =>    'MQTT',
        'host'          =>    '127.0.0.1',
        'port'          =>    8081,
        'controller'    =>  \ImiApp\MQTTServer\Controller\MQTTController::class,
        // 'configs'       =>    [
        //     // 启用 MQTTS 配置证书
        //     'ssl_cert_file'     =>  dirname(__DIR__) . '/ssl/server.crt',
        //     'ssl_key_file'      =>  dirname(__DIR__) . '/ssl/server.key',
        // ],
    ],
],

В методах контроллера возвращайте объект пакета, представляющий ответ на текущий запрос.

Также поддерживается метод \Imi\Server\Server::send() и т. д., см.: https://doc.imiphp.com/utils/Server.html.

Разработка MQTT-клиента

Класс слушателя событий:

<?php
namespace Imi\MQTT\Test;

use Imi\MQTT\Client\Contract\IMQTTClientListener;

class TestClientListener implements IMQTTClientListener
{
    /**
     * 连接确认
     *
     * @param \Imi\MQTT\Client\MQTTClient $client
     * @param \BinSoul\Net\Mqtt\Packet\ConnectResponsePacket $packet
     * @return void
     */
    public function connectACK(\Imi\MQTT\Client\MQTTClient $client, \BinSoul\Net\Mqtt\Packet\ConnectResponsePacket $packet)
    {
    }

    /**
     * 发布
     *
     * @param \Imi\MQTT\Client\MQTTClient $client
     * @param \BinSoul\Net\Mqtt\Packet\PublishRequestPacket $packet
     * @return void
     */
    public function publish(\Imi\MQTT\Client\MQTTClient $client, \BinSoul\Net\Mqtt\Packet\PublishRequestPacket $packet)
    {
    }

    /**
     * 发布确认
     *
     * @param \Imi\MQTT\Client\MQTTClient $client
     * @param \BinSoul\Net\Mqtt\Packet\PublishAckPacket $packet
     * @return void
     */
    public function publishAck(\Imi\MQTT\Client\MQTTClient $client, \BinSoul\Net\Mqtt\Packet\PublishAckPacket $packet)
    {
    }

    /**
     * 发布已收到(保证交付部分1)
     *
     * @param \Imi\MQTT\Client\MQTTClient $client
     * @param \BinSoul\Net\Mqtt\Packet\PublishReceivedPacket $packet
     * @return void
     */
    public function publishReceived(\Imi\MQTT\Client\MQTTClient $client, \BinSoul\Net\Mqtt\Packet\PublishReceivedPacket $packet)
    {
    }

    /**
    * 发布释放(确保交付的第2部分)
    *
    * @param \Imi\MQTT\Client\MQTTClient $client
    * @param \BinSoul\Net\Mqtt\Packet\PublishReleasePacket $packet
    * @return void
    */
    public function
``` **Публикация релиза (Imi\MQTT\Client\MQTTClient $client, BinSoul\Net\Mqtt\Packet\PublishReleasePacket $packet)**

    {}

    /**
     * Публикация завершена (гарантированная доставка третьей части)
     */

    public function publishComplete(Imi\MQTT\Client\MQTTClient $client, BinSoul\Net\Mqtt\Packet\PublishCompletePacket $packet) {
    }

    /**
     * Подписка подтверждена
     */

    public function subscribeACK(Imi\MQTT\Client\MQTTClient $client, BinSoul\Net\Mqtt\Packet\SubscribeResponsePacket $packet) {
    }

    /**
     * Отмена подписки подтверждена
     */

    public function unsubscribeACK(Imi\MQTT\Client\MQTTClient $client, BinSoul\Net\Mqtt\Packet\UnsubscribeResponsePacket $packet) {
    }

    /**
     * Ответ на пинг
     */

    public function ping(Imi\MQTT\Client\MQTTClient $client, BinSoul\Net\Mqtt\Packet\PingResponsePacket $packet) {
    }
**Вызов клиента:**

```php
use Imi\MQTT\Client\MQTTClient;
$client = new MQTTClient([
    'host'          =>  '127.0.0.1',
    'port'          =>  8081,
], new TestClientListener);
$client->wait(); // 开始循环接收,直到关闭连接

Таблица параметров клиента:

Параметр Описание
host Имя хоста сервера
port Порт сервера
timeout Время ожидания сетевого соединения
pingTimespan Интервал времени для периодического пинга, в секундах. Если значение равно NULL, то автоматический пинг не выполняется
protocol Уровень протокола, по умолчанию 4. Возможные значения: 3-MQIsdp, 4-MQTT
username Имя пользователя
password Пароль
clientId Идентификатор клиента
keepAlive Время поддержания активности соединения
clean Очистка сеанса
will Сообщение завещания, структура которого описана в таблице ниже
ssl Использование SSL-соединения
sslCertFile Файл сертификата
sslKeyFile Файл ключа сертификата
sslVerifyPeer Проверка сертификата сервера
sslAllowSelfSigned Разрешение самоподписанных сертификатов
sslHostName Имя хоста сервера для проверки сертификата
sslCafile CA-сертификат
sslCapath Каталог сертификатов

Параметры сообщения завещания (will):

Параметр Описание
topic Тема
payload Полезная нагрузка
qosLevel Уровень качества обслуживания: 0 — максимум одна передача, 1 — минимум одна передача, 2 — только одна передача
retain Сохранение
duplicate Дублирование

Бесплатная техническая поддержка

QQ группа: 17916227 ![Добавить в группу](https://pub.idqqimg.com/wpa/images/group.png «Добавить в группу»), где вы можете получить помощь и решение проблем от других участников.

Среда выполнения

  • PHP >= 7.2
  • Composer
  • Swoole >= 4.4.0

Информация о лицензии

Проект imi-mqtt распространяется под лицензией MIT и доступен для бесплатного использования.

Пожертвования

Открытый исходный код не предполагает коммерческой выгоды, и любая сумма будет принята с благодарностью. Жизнь непроста, так что всё зависит от случая...

Комментарии ( 0 )

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

Введение

В рамках фреймворка IMI разработан сервер MQTT, и в него встроен клиент MQTT. Расширить Свернуть
PHP и 2 других языков
MIT
Отмена

Обновления

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

Участники

все

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

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