Введение
В рамках 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',
],
]
imi-mqtt
разработан на основе binsoul/net-mqtt
, и все используемые структуры данных пакетов взяты из этого пакета.
Имена классов обычно имеют вид BinSoul\Net\Mqtt\Packet\XXX
.
Например, \BinSoul\Net\Mqtt\Packet\SubscribeRequestPacket
.
Во-первых, конфигурация сервера должна быть установлена как «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.
Класс слушателя событий:
<?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 «Добавить в группу»), где вы можете получить помощь и решение проблем от других участников.
Проект imi-mqtt распространяется под лицензией MIT и доступен для бесплатного использования.
Открытый исходный код не предполагает коммерческой выгоды, и любая сумма будет принята с благодарностью. Жизнь непроста, так что всё зависит от случая...
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )