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

OSCHINA-MIRROR/emqx-emqtt

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

emqtt

MQTT client library и инструменты командной строки, реализованные на Erlang и поддерживающие MQTT v5.0/3.1.1/3.1.

Начало работы

В качестве инструмента командной строки

Сборка

$ make

Опционально можно отключить поддержку QUIC, если у вас есть проблемы с компиляцией:

BUILD_WITHOUT_QUIC=1 make

После успешной компиляции вы получите скрипт под названием emqtt в _build/emqtt/rel/emqtt/bin. Мы можем увидеть, что emqtt может делать с опцией --help:

$ ./emqtt --help
Usage: emqtt pub | sub [--help]

emqtt pub используется для публикации одного сообщения по теме и выхода. emqtt sub используется для подписки на тему и печати получаемых сообщений.

Синтаксис командной строки

Опции могут иметь как короткие (один символ), так и длинные (строка) имена опций.

Короткая опция может иметь следующий синтаксис:

-e arg         Одиночная опция 'e', аргумент "arg"

Длинная опция может иметь следующий синтаксис:

--example=arg  Одиночная опция 'example', аргумент "arg"
--example arg  Одиночная опция 'example', аргумент "arg"

Публикация

Синопсис

./emqtt pub [-h [<host>]] [-p <port>] [-I <iface>]
            [-V [<protocol_version>]] [-u <username>]
            [-P <password>] [-C <clientid>] [-k [<keepalive>]]
            [-t <topic>] [-q [<qos>]] [-r [<retain>]]
            [--help <help>] [--will-topic <will_topic>]
            [--will-payload <will_payload>]
            [--will-qos [<will_qos>]]
            [--will-retain [<will_retain>]]
            [--enable-websocket [<enable_websocket>]]
            [--enable-quic [<enable_quic>]]
            [--enable-ssl [<enable_ssl>]]
            [--tls-version [<tls_version>]]
            [--CAfile <cafile>] [--cert <cert>] [--key <key>]
            [--payload <payload>]
            [--file <path/to/file>]
            [--repeat [<repeat>]]
            [--repeat-delay [<repeat_delay>]]

Опции

-h, --host

  Укажите хост для подключения, поддерживаются доменные имена и IP-адреса. По умолчанию — localhost.

-p, --port

  Укажите порт для подключения. Если не указано, будет использоваться значение по умолчанию 1883 для MQTT или 8883 для MQTT через TLS.

-I, --iface

  Укажите сетевой интерфейс или IP-адрес для использования.

-V, --protocol-version

  Укажите версию протокола MQTT, используемую клиентом. Может быть v3.1, v3.1.1 и v5. По умолчанию используется v5.

-u, --username

  Укажите имя пользователя, которое может использоваться брокером для аутентификации и авторизации.

-P, --password

  Укажите пароль для имени пользователя.

-C, --clientid

  Укажите идентификатор клиента. Если не указан, идентификатор клиента в формате emqtt-<Hostname>-<Random Hexadecimal String> будет автоматически сгенерирован emqtt_cli.

-k, --keepalive

  Укажите интервал в секундах для отправки пакетов PINGREQ брокеру. По умолчанию составляет 300 секунд.

-t, --topic

  Укажите тему MQTT, которую вы хотите опубликовать. Если тема начинается с $, вы должны использовать одинарные кавычки (') для указания темы, а не двойные кавычки ("). Это обязательная опция.

-q, --qos

  Укажите качество обслуживания для сообщения. Может быть 0, 1 и 2. По умолчанию используется 0.

-r, --retain

  Укажите, является ли сообщение сохранённым сообщением. По умолчанию используется false.

--payload

  Укажите прикладное сообщение, которое должно быть опубликовано. Это обязательная опция.

--repeat

  Укажите количество раз, когда сообщение будет повторно опубликовано. По умолчанию используется значение 1. Текст запроса переведён на русский язык:

Сообщение было доставлено до публикации следующего. По умолчанию используется значение 0, это означает публикацию повторных сообщений сразу после отправки предыдущего сообщения.

--will-topic

Укажите тему сообщения will, отправляемого при неожиданном отключении клиента.

--will-qos

Укажите качество обслуживания сообщения will. По умолчанию используется значение 0. Этот параметр должен использоваться вместе с --will-topic.

--will-retain

Укажите, является ли сообщение will сохранённым сообщением. По умолчанию используется значение false. Этот параметр должен использоваться вместе с --will-topic.

--will-payload

Укажите прикладное сообщение, которое будет храниться брокером и отправляться, если этот клиент неожиданно отключится. Этот параметр должен использоваться вместе с --will-topic.

--enable-websocket

Укажите включение транспорта WebSocket или нет. В настоящее время эту опцию нельзя использовать с --enable-ssl.

--enable-quic

Используйте quic в качестве транспорта. Эту опцию нельзя комбинировать с --enable-ssl или --enable-websocket.

--enable-ssl

Укажите включение SSL/TLS транспорта или нет. Эту опцию в настоящее время нельзя использовать с --enable-websocket.

--tls-version

Укажите, какой протокол TLS следует использовать при общении с брокером. Допустимые варианты: tlsv1.3, tlsv1.2, tlsv1.1 и tlsv1. По умолчанию используется tlsv1.2.

--CAfile

Укажите путь к файлу, содержащему PEM-кодированные сертификаты CA. Этот параметр необходимо использовать вместе с --enable-ssl.

--cert

Укажите путь к файлу, содержащему сертификат PEM для этого клиента, если это требуется сервером. Этот параметр необходимо использовать вместе с --enable-ssl.

--key

Укажите путь к файлу, содержащему закрытый ключ PEM для этого клиента, если это требуется сервером. Этот параметр необходимо использовать вместе с --enable-ssl.

Примеры

Опубликовать простое сообщение через TCP-соединение

$ ./emqtt pub -t "hello" --payload "hello world"
Client emqtt-zhouzibodeMacBook-Pro-4623faa14d8256e9cb95 sent CONNECT
Client emqtt-zhouzibodeMacBook-Pro-4623faa14d8256e9cb95 sent PUBLISH (Q0, R0, D0, Topic=hello, Payload=...(11 bytes))
Client emqtt-zhouzibodeMacBook-Pro-4623faa14d8256e9cb95 sent DISCONNECT

Опубликовать простое сообщение по TLS-соединению

$ ./emqtt pub --enable-ssl=true -t "hello" --payload "hello world" --CAfile=certs/cacert.pem --cert=certs/client-cert.pem --key=certs/client-key.pem
Client emqtt-zhouzibodeMacBook-Pro-cec9489c26e3ed7a38eb sent CONNECT
Client emqtt-zhouzibodeMacBook-Pro-cec9489c26e3ed7a38eb sent PUBLISH (Q0, R0, D0, Topic=hello, Payload=...(11 bytes))
Client emqtt-zhouzibodeMacBook-Pro-cec9489c26e3ed7a38eb sent DISCONNECT

Публиковать сообщение повторно через WebSocket-соединение

$ ./emqtt pub --enable-websocket=true -p 8083 -t "hello" --payload "hello world"
Client emqtt-zhouzibodeMacBook-Pro-1e4677ab46cecf1298ac sent CONNECT
Client emqtt-zhouzibodeMacBook-Pro-1e4677ab46cecf1298ac sent PUBLISH (Q0, R0, D0, Topic=hello, Payload=...(11 bytes))
Client emqtt-zhouzibodeMacBook-Pro-1e4677ab46cecf1298ac sent DISCONNECT **--CAfile <cafile>**

&ensp;&ensp;См. также [–CAfile](#CAfile).

**--cert <cert>**

&ensp;&ensp;См. также [–cert](#cert).

**--key <key>**

&ensp;&ensp;См. также [–key](#key).

* * *

**–h, –host**

&ensp;&ensp;См. также [–host](#host).

**–p, –port**

&ensp;&ensp;См. также [–port](#port).

**–I, –iface**

&ensp;&ensp;См. также [–iface](#iface).

**–V, –protocol-version**

&ensp;&ensp;См. также [–protocol-version](#protocol-version).

**–u, –username**

&ensp;&ensp;См. также [–username](#username).

**–P, –password**

&ensp;&ensp;См. также [–password](#password).

**–C, –clientid**

&ensp;&ensp;См. также [–clientid](#clientid).

**–k, –keepalive**

&ensp;&ensp;См. также [–keepalive](#keepalive).

**–t, –topic**

&ensp;&ensp;Укажите тему MQTT, на которую вы хотите подписаться. Это обязательный параметр.

**–q, –qos**

&ensp;&ensp;Укажите максимальный уровень QoS, при котором брокер может отправлять клиентские сообщения приложения. По умолчанию 0.

**––retain-as-publish**

&ensp;&ensp;Задайте опцию «Сохранить как опубликовать» в параметрах подписки. По умолчанию 0.

**––retain-handling**

&ensp;&ensp;Установите опцию «Обработка сохранения» в параметрах подписки. По умолчанию 0.

**––print**

&ensp;&ensp;Используйте размер для печати только количества полученных байтов полезной нагрузки. Если этот параметр не указан, полезная нагрузка печатается в виде строки.

* * *

**––will-topic**

&ensp;&ensp;См. также [––will-topic](#will-topic).

**––will-qos**

&ensp;&ensp;См. также [––will-qos](#will-qos).

**––will-retain**

&ensp;&ensp;См. также [––will-retain](#will-retain).

**––will-payload**

&ensp;&ensp;См. также [––will-payload](#will-payload).

**––enable-websocket**

&ensp;&ensp;См. также [––enable-websocket](#enable-websocket).

**––enable-quic**

&ensp;&ensp;См. также [––enable-quic](#enable-quic).

**––enable-ssl**

&ensp;&ensp;См. также [––enable-ssl](#enable-ssl).

**––tls-version**

&ensp;&ensp;См. также [––tls-version](#tls-version).

**––CAfile**

&ensp;&ensp;См. также [––CAfile](#CAfile).

**––cert**

&ensp;&ensp;См. также [––cert](#cert).

**––key**

&ensp;&ensp;См. также [––key](#key). **emqtt:start_link() -> {ok, Pid} | ignore | {error, Reason}**

**emqtt:start_link(Options) -> {ok, Pid} | ignore | {error, Reason}**  

*Типы:*  
Pid = pid()  
Reason = term()  
Options = [[option()](#option)]  

Запустить процесс MQTT-клиента с указанными параметрами. Параметры будут использоваться при подключении и работе.  

Доступны следующие параметры:  

`{name, Name}`  
Если указано имя, gen_statem будет зарегистрирован с этим именем. Подробнее см. документацию для первого аргумента `gen_statem:start_link/4`.  

`{owner, Pid}`  
Клиентский процесс будет отправлять сообщения типа `{diconnected, ReasonCode, Properties}` в процесс владельца.  

`{host, Host}`  
Хост MQTT-сервера для подключения. Хост может быть именем хоста или IP-адресом. По умолчанию — `localhost`.  

`{hosts, [{Host, Port}]}`  
Список хостов для подключения. Если подключение к первому хосту не удастся, клиент попытается подключиться к следующему хосту в списке. Если соединение со всеми хостами не удастся, клиент вернёт ошибку. Установка этого параметра переопределит параметр `host`.  

`{port, Port}`  
Порт MQTT-сервера для подключения. Если не указан, будет использоваться значение по умолчанию 1883 для MQTT или 8883 для MQTT через TLS.  

`{tcp_opts, Options}`  
Дополнительные параметры для `gen_tcp:connect/3`.  

`{ssl, boolean()}`  
Включить транспорт SSL/TLS или нет. По умолчанию используется значение false.  

`{ssl_opts,` Дополнительные опции для `ssl:connect/3`.

`{ws_path, Path}` — путь к ресурсу. По умолчанию `/mqtt`.  

`{connect_timeout, Timeout}` — максимальное время ожидания подключения к серверу и возврата сервером CONNACK. По умолчанию 60 секунд.  

`{bridge_mode, boolean()}` — включить режим моста или нет. По умолчанию false.  

`{clientid, ClientID}` — указать идентификатор клиента. Если не указано, идентификатор клиента будет использовать значение, назначенное сервером в MQTT v5, или автоматически генерироваться внутренним кодом в MQTT v3.1/v3.1.1.  

`{clean_start, CleanStart}` — должен ли сервер отбросить существующий сеанс и начать новый сеанс. По умолчанию true.  

`{username, Username}` — имя пользователя, используемое сервером для аутентификации и авторизации.  

`{password, Password}` — пароль, используемый сервером для аутентификации и авторизации.  

`{proto_ver, ProtocolVersion}` — версия протокола MQTT. По умолчанию `v4`.  

`{keepalive, Keepalive}` — максимальный интервал времени, который может пройти между моментом, когда клиент завершает передачу одного пакета управления MQTT, и моментом, когда он начинает отправлять следующий. Будет заменён на keep alive сервера, возвращённый сервером MQTT.  

`{max_inflight, MaxInflight}` — максимальное количество пакетов QoS 1 и QoS 2 в полёте. Другими словами, количество пакетов, которые были отправлены, но ещё не подтверждены. По умолчанию infinity, что означает отсутствие жёсткого ограничения. Однако у сервера может быть своя идея, и он может объявить об этом через свойство Receive-Maximum в пакете CONNACK. В этом случае будет действовать меньшее из двух значений.  

После заполнения окна в полёте сообщения будут помещены в очередь в процессе Клиента и отправлены, когда слоты в окне в полёте станут доступными. Ограничения на размер очереди нет, поэтому рекомендуется использовать меры контроля потока или установить разумные тайм-ауты публикации, если вы ожидаете, что пропускная способность сервера будет недостаточной.  

`{retry_interval, RetryInterval}` — интервал повторной попытки отправки пакетов, которые были отправлены, но не получили ответа. По умолчанию 30 секунд.  

`{will_topic, WillTopic}` — тема сообщения will.  

`{will_payload, WillPayload}` — полезная нагрузка сообщения will.  

`{will_retain, WillRetain}` — следует ли серверу публиковать сообщение will как сохранённое сообщение. По умолчанию false.  

`{will_qos, WillQoS}` — QoS сообщения will. По умолчанию 0.  

`{will_props, WillProperties}` — свойства сообщения will.  

`{auto_ack, boolean()}` — если true (по умолчанию), чистый процесс автоматически отправит пакет подтверждения, например PUBACK, при получении пакета от сервера. Если false, приложение решает, что делать.  

`{ack_timeout, AckTimeout}` — максимальное время ожидания ответного сообщения. По умолчанию 30 секунд.  

`{force_ping, boolean()}` — если false (по умолчанию), если в интервале keep alive отправляется любой другой пакет, пакет ping в этот раз отправляться не будет. Если true, пакет ping будет отправляться каждый раз.  

`{low_mem, boolean()}` — если true, клиент попытается уменьшить использование памяти, чаще выполняя сборку мусора. По умолчанию false.  

`{reconnect, infinity | non_neg_integer()}` — максимальное число попыток повторного подключения. По умолчанию 0, означает отсутствие повторного подключения.  

`{reconnect_timeout, pos_integer()}` — временной интервал между попытками повторного подключения. По умолчанию 5 секунд.  

`{properties, Properties}` — свойства пакета CONNECT.  

`{custom_auth_callbacks, Callbacks}` — эта опция конфигурации позволяет использовать расширенные механизмы аутентификации в MQTT v5 путём указания пользовательских функций обратного вызова.  

**emqtt:connect(Client) -> {ok, Properties} | {error, Reason}**  

&ensp;&ensp;**Типы**  

&ensp;&ensp;&ensp;&ensp;**Client = [client()](#client)**  

&ensp;&ensp;&ensp;&ensp;**Properties = [properties()](#properties)**  

&ensp;&ensp;&ensp;&ensp;**Reason = timeout | inet:posix() | any()**  

Подключиться к серверу MQTT по TCP или TLS и отправить пакет CONNECT с параметрами, указанными в start_link/1, 2. Клиент должен быть pid, возвращённым из start_link/1, 2, или именем, указанным в start_link/1, 2.  

Возвращает:  

— `{ok, Properties}`, если установлено соединение MQTT. Отправляется пакет QoS 1/2, будет возвращён идентификатор пакета.

- `{error, Reason}`, если что-то пойдёт не так.

**emqtt:puback(Client, PacketId) -> ok**

**emqtt:puback(Client, PacketId, ReasonCode) -> ok**

**emqtt:puback(Client, PacketId, ReasonCode, Properties) -> ok**

&ensp;&ensp;**Типы**

&ensp;&ensp;&ensp;&ensp;**Client = [client()](#client)**

&ensp;&ensp;&ensp;&ensp;**PacketId = [packet_id()](#packetid)**

&ensp;&ensp;&ensp;&ensp;**ReasonCode = [reason_code()](#reasoncode)**

&ensp;&ensp;&ensp;&ensp;**Properties = [properties()](#properties)**

Отправьте пакет `PUBACK` на сервер MQTT. `PacketId`, `ReasonCode` и `Properties` определяют идентификатор пакета, код причины и свойства для пакета `PUBACK`.

**emqtt:pubrec(Client, PacketId) -> ok**

**emqtt:pubrec(Client, PacketId, ReasonCode) -> ok**

**emqtt:pubrec(Client, PacketId, ReasonCode, Properties) -> ok**

&ensp;&ensp;**Типы**

&ensp;&ensp;&ensp;&ensp;То же, что и `emqtt:puback/2, 3, 4`.

Отправьте пакет `PUBREC` на сервер MQTT. `PacketId`, `ReasonCode` и `Properties` определяют идентификатор пакета, код причины и свойства для пакета `PUBREC`.

**emqtt:pubrel(Client, PacketId) -> ok**

**emqtt:pubrel(Client, PacketId, ReasonCode) -> ok**

**emqtt:pubrel(Client, PacketId, ReasonCode, Properties) -> ok**

&ensp;&ensp;**Типы**

&ensp;&ensp;&ensp;&ensp;То же, что и `emqtt:puback/2, 3, 4`.

Отправьте пакет `PUBREL` на сервер MQTT. `PacketId`, `ReasonCode` и `Properties` определяют идентификатор пакета, код причины и свойства для пакета `PUBREL`.

**emqtt:pubcomp(Client, PacketId) -> ok**

**emqtt:pubcomp(Client, PacketId, ReasonCode) -> ok**

**emqtt:pubcomp(Client, PacketId, ReasonCode, Properties) -> ok**

&ensp;&ensp;**Типы**

&ensp;&ensp;&ensp;&ensp;То же, что и `emqtt:puback/2, 3, 4`.

Отправьте пакет `PUBCOMP` на сервер MQTT. `PacketId`, `ReasonCode` и `Properties` определяют идентификатор пакета, код причины и свойства для пакета `PUBCOMP`.

**emqtt:subscriptions(Client) -> Subscriptions**

&ensp;&ensp;**Типы**

&ensp;&ensp;&ensp;&ensp;**Client = [client()](#client)**

&ensp;&ensp;&ensp;&ensp;**Subscriptions = [{[topic()](#topic), [[subopt()](#subopt)]}]**

Верните все подписки.

**emqtt:stop(Client) -> ok**

&ensp;&ensp;**Типы**

&ensp;&ensp;&ensp;&ensp;**Client = [client()](#client)**

Остановите клиентский процесс.

**emqtt:pause(Client) -> ok**

&ensp;&ensp;**Типы**

&ensp;&ensp;&ensp;&ensp;**Client = [client()]**

Приостановите клиентский процесс. Приостановленный клиентский процесс будет игнорировать все полученные пакеты `PUBLISH` и не отправлять пакет `PINGREQ`, если `force_ping` установлен в значение false.

**emqtt:resume(Client) -> ok**

&ensp;&ensp;**Типы**

&ensp;&ensp;&ensp;&ensp;**Client = [client()]**

Возобновите приостановленный клиентский процесс. ```
Инициализирующая функция (InitFunc) выполняется с аргументами InitArgs. Она должна возвращать кортеж `{AuthProps, AuthState}`, где:

- `AuthProps` — карта, содержащая начальные свойства аутентификации, включая `'Authentication-Method'` и `'Authentication-Data'`.

- `AuthState` — термин, который используется на последующих этапах аутентификации.
Функция HandleAuth отвечает за продолжение процесса аутентификации. Она принимает следующие параметры:

- `AuthState`: текущее состояние аутентификации.
- `continue_authentication | ErrorCode`: указание продолжить аутентификацию или код ошибки, указывающий причину сбоя.
- `AuthProps`: карта, содержащая свойства для аутентификации, которая всегда должна включать `'Authentication-Method'` и `'Authentication-Data'` на каждом этапе процесса аутентификации. 

Функция должна возвращать кортеж в виде: {continue, {?RC_CONTINUE_AUTHENTICATION, AuthProps}, AuthState} для продолжения или {stop, Reason} для прерывания.

Для практической реализации этих обратных вызовов обратитесь к следующим наборам тестов в этом репозитории:

  • test/emqtt_scram_auth_SUITE.erl
  • test/emqtt_kerberos_auth_SUITE.erl.

Эти примеры демонстрируют, как настроить обратные вызовы аутентификации для различных механизмов SASL, поддерживаемых EMQTT.

Введение

Клиент Erlang MQTT версии 5.0. Расширить Свернуть
Apache-2.0
Отмена

Обновления

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

Участники

все

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

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