Обмен сообщениями в реальном времени с использованием Mqtt

Исходный узел: 810816
учение о тактильной чувствительности

Этот пост написан Вираджем Анчаном, инженером Full Stack в Haptik.

Haptik - это приложение для чата, которое соединяет пользователей с их личными цифровымипомощники в настоящее время. При общении с личным помощник, вам нужно как можно меньше задержек, чтобы все было сделано быстро.

Когда я присоединился к Haptik после окончания колледжа в мае 2015 года, моей первой технической проблемой было изучение архитектуры обмена сообщениями. В июле 2015 года я предложил нашему техническому директору перейти с XMPP на MQTT. Наши мобильные приложения (Android и iOS) и Athena (инструмент веб-чата, используемый нашими помощники) использовал XMPP для обмена сообщениями в реальном времени. Мы столкнулись с множеством проблем с XMPP. Отметим несколько: в XMPP отсутствует встроенное качество обслуживания (QoS). QoS - это соглашение между отправителем и получателем сообщения о гарантиях доставки сообщения. Поскольку в XMPP не было встроенного QoS, нам пришлось создать собственное решение для обеспечения доставки сообщений. Вместе с этим сеанс XMPP представляет собой один большой длинный XML-документ, и каждый клиент должен использовать управляемый событиями XML-анализатор. В общем, XMPP оказался для нас большим количеством накладных расходов и обслуживания, и нам нужно было лучшее, более масштабируемое решение. В январе 2016 года мы наконец решили перейти с XMPP на MQTT.

MQTT - это легкий протокол межмашинного взаимодействия / «Интернета вещей». MQTT расшифровывается как MQ Telemetry Transport. MQTT - чрезвычайно простой и легкий протокол обмена сообщениями публикации / подписки. Он разработан для устройств с ограниченными возможностями, больших задержек или ненадежных сетей. Принципы проектирования состоят в том, чтобы минимизировать требования к пропускной способности сети и ресурсам устройства, одновременно пытаясь обеспечить надежность и некоторую степень уверенности в доставке. Эти принципы делают MQTT идеальным для Интернета вещей и мобильных приложений, где пропускная способность и заряд батареи имеют большое значение.

5 причин, почему мы перешли с XMPP на MQTT

1. Меньше накладных расходов и легкий вес
2. Поддерживает QoS (выстрелил и забыл, хотя бы один раз и ровно один раз)
3. Низкий уровень активности трафика.
4. Механизм Pub / Sub
5. Низкое энергопотребление.

MQTT предоставляет 3 типа QoS для доставки сообщений:

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

QoS 1 (хотя бы один раз) - сообщение доставляется хотя бы один раз. Сообщения могут доставляться несколько раз, если отправитель не получает подтверждения от получателя. Сообщения должны храниться на стороне отправителя, пока отправитель не получит подтверждение от получателя.

QoS 2 (Ровно один раз) - сообщение доставляется ровно один раз. QoS 2 гарантирует, что сообщение будет получено получателем ровно один раз. Сообщения должны храниться на стороне отправителя, пока отправитель не получит подтверждение от получателя. Это самый надежный способ перевода. Это также самый медленный режим передачи, поскольку он использует расширенную последовательность подтверждения по сравнению с QoS 1.

MQTT использует шаблон, называемый публикацией / подпиской. К брокеру MQTT подключаются несколько клиентов. Клиенты могут публиковать или подписываться на тему. Темы используются брокером, чтобы решить, кто получит сообщение. Брокер и MQTT действуют как простой общий интерфейс, к которому можно подключиться.

Наш сервер MQTT работает на Москитто. Mosquitto - это брокер сообщений с открытым исходным кодом, который реализует MQTT. Он написан на C. Mosquitto прост в установке и развертывании. Он поддерживает TLS, Websockets и обеспечивает аутентификацию по имени пользователя и паролю, предварительно разделенным ключам или клиентским сертификатам TLS. Он также поддерживает ACL. Используя ACL, вы можете настроить, какие клиенты имеют доступ к каким темам. Мы решили использовать Пахо Python библиотека для бэкэнда. Наш бэкэнд поддерживает соединение MQTT и направляет сообщения через конвейер чата.

Установка (mosquitto на ubuntu)
sudo apt-get установить комара

Установка (paho-python)
pip установить paho-python

Вот простой клиент, который выписывает в тему (спорт / крикет / Индия) и распечатывает полученные сообщения.

<i><span style="font-weight: 400;">import paho.mqtt.client as mqtt</span></i>

<i><span style="font-weight: 400;"># The callback for when the client receives a CONNACK response from the server.
</span></i><i><span style="font-weight: 400;">def on_connect(client, userdata, flags, rc):
</span></i><i><span style="font-weight: 400;">&nbsp; &nbsp; print("Connected with result code " + str(rc))
</span></i><i><span style="font-weight: 400;">&nbsp; &nbsp; client.subscribe("sports/cricket/india")</span></i>

<i><span style="font-weight: 400;"># The callback for when a PUBLISH message is received from the server.
</span></i><i><span style="font-weight: 400;">def on_message(client, userdata, msg):
</span></i><i><span style="font-weight: 400;">&nbsp; &nbsp; print(msg.topic +" " + str(msg.payload))
</span></i><i><span style="font-weight: 400;">&nbsp; &nbsp; client = mqtt.Client()</span></i><i>
</i>

<i><span style="font-weight: 400;">client.on_connect = on_connect
</span></i><i><span style="font-weight: 400;">client.on_message = on_message</span></i>

<i><span style="font-weight: 400;">client.connect("localhost", 1883, 60)</span></i>

<i><span style="font-weight: 400;">client.loop_forever() &nbsp;</span></i>

Вот простой клиент, который издает по теме (спорт / крикет / Индия)

<i><span style="font-weight: 400;">import paho.mqtt.client as mqtt</span></i>

<i><span style="font-weight: 400;">client = mqtt.Client()
</span></i><i><span style="font-weight: 400;">client.connect("localhost", 1883, 60)
</span></i><i><span style="font-weight: 400;">client.publish("sports/cricket/india", "India wins Asia Cup 2016!")
</span></i><i><span style="font-weight: 400;">client.loop(2)</span></i>

MQTT помог облегчить наше приложение и обеспечить надежную доставку сообщений в реальном времени. MQTT - потрясающий протокол, который имеет множество приложений в мобильной связи, IOT и M2M-коммуникации. Если вам нужен легкий и надежный протокол обмена сообщениями, вам обязательно стоит подумать о MQTT.

Хотите стать частью того удивительного, что мы создаем? Не смотрите дальше! Свяжитесь с нами по адресу привет@haptik.co

Source: https://chatbotslife.com/real-time-messaging-using-mqtt-71e7a4c0d868?source=rss—-a49517e4c30b—4

Отметка времени:

Больше от Жизнь чат-ботов - Средняя