Mensagens em tempo real usando Mqtt

Nó Fonte: 810816
haptics

Este post foi escrito por Viraj Anchan, Full Stack Engineer da Haptik.

Haptik é um aplicativo de bate-papo que conecta os usuários aos seus dados pessoais digitaisassistentes em tempo real. Ao conversar com seu pessoal assistente, você deseja o menor atraso possível para fazer as coisas rapidamente.

Quando entrei para a Haptik depois de me formar na faculdade em maio de 2015, meu primeiro desafio técnico foi aprender a arquitetura de mensagens. Em julho de 2015, sugeri ao nosso CTO que mudássemos de XMPP para MQTT. Nossos aplicativos móveis (Android e iOS) e Athena (ferramenta de chat da web usada por nosso assistentes) usou o XMPP para mensagens em tempo real. Estávamos enfrentando muitos problemas com o XMPP. Para apontar alguns, o XMPP carece de qualidade de serviço (QoS) integrada. QoS é um acordo entre o remetente e o destinatário de uma mensagem quanto às garantias de entrega de uma mensagem. Como o XMPP não tinha QoS embutido, tivemos que construir nossa própria solução personalizada para garantir a entrega da mensagem. Junto com essa sessão XMPP está um grande documento XML longo e cada cliente tem que usar um analisador XML baseado em eventos. Em suma, o XMPP estava provando ser uma grande sobrecarga e manutenção para nós e precisávamos de uma solução melhor e mais escalonável. Em janeiro de 2016, finalmente decidimos mudar de XMPP para MQTT.

MQTT é um protocolo de conectividade leve de máquina a máquina / ”Internet das coisas”. MQTT significa MQ Telemetry Transport. MQTT é um protocolo de mensagens de publicação / assinatura extremamente simples e leve. Ele é projetado para dispositivos restritos, alta latência ou redes não confiáveis. Os princípios de design visam minimizar a largura de banda da rede e os requisitos de recursos do dispositivo, ao mesmo tempo que tentam garantir a confiabilidade e algum grau de garantia de entrega. Esses princípios tornam o MQTT ideal para IOT e aplicativos móveis em que a largura de banda e a energia da bateria são preciosas.

5 razões pelas quais mudamos de XMPP para MQTT

1. Menos sobrecarga e leve
2. Suporta QoS (dispare e esqueça, pelo menos uma vez e exatamente uma vez)
3. Baixo tráfego de manutenção de atividade
4. Mecanismo Pub / Sub
5. Baixo consumo de energia

MQTT fornece 3 tipos de QoS para entrega de mensagens:

QoS 0 (disparar e esquecer) - A mensagem é entregue no máximo uma vez. As mensagens QoS 0 não são armazenadas. Portanto, as mensagens QoS 0 são perdidas se o cliente se desconectar. Em QoS 0, a entrega da mensagem não é confirmada. É o modo de transferência mais rápido.

QoS 1 (pelo menos uma vez) - A mensagem é entregue pelo menos uma vez. As mensagens podem ser entregues várias vezes se o remetente não receber uma confirmação do destinatário. As mensagens devem ser armazenadas no final do remetente, até que o remetente receba uma confirmação do destinatário.

QoS 2 (exatamente uma vez) - A mensagem é entregue exatamente uma vez. O QoS 2 garante que a mensagem seja recebida exatamente uma vez pelo receptor. As mensagens devem ser armazenadas no final do remetente, até que o remetente receba uma confirmação do destinatário. É o modo de transferência mais confiável. É também o modo de transferência mais lento, pois usa uma sequência de confirmação avançada em comparação com QoS 1.

MQTT usa um padrão chamado publicar / assinar. Vários clientes se conectam ao broker MQTT. Os clientes podem publicar ou assinar um tópico. Os tópicos são usados ​​pelo corretor para decidir quem receberá uma mensagem. O broker e o MQTT atuam como uma interface simples e comum para tudo se conectar.

Nosso servidor MQTT é alimentado por mosquito. Mosquitto é um agente de mensagens de software livre que implementa o MQTT. Está escrito em C. O Mosquitto é fácil de instalar e implantar. Ele oferece suporte a TLS, Websockets e fornece autenticação por meio de nome de usuário / senha, chaves pré-compartilhadas ou certificados de cliente TLS. Ele também oferece suporte a ACL. Usando ACL, você pode configurar quais clientes podem acessar quais tópicos. Decidimos usar Paho Python biblioteca para o back-end. Nosso back-end mantém uma conexão MQTT e roteia mensagens por meio de nosso pipeline de bate-papo.

Instalação (mosquitto no ubuntu)
sudo apt-get install mosquito

Instalação (paho-python)
pip instalar paho-python

Aqui está um cliente simples que assina para um tópico (esportes / críquete / Índia) e imprime as mensagens resultantes.

<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>

Aqui está um cliente simples que publica a um tópico (esportes / críquete / Índia)

<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>

O MQTT ajudou a tornar nosso aplicativo leve e a garantir a entrega confiável de mensagens em tempo real. MQTT é um protocolo incrível que possui muitas aplicações em comunicações móveis, IOT e M2M. Se você deseja um protocolo de mensagens leve e confiável, definitivamente deve considerar o MQTT.

Deseja fazer parte das coisas incríveis que construímos? Não procure mais! Entre em contato conosco em olá@haptik.co

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

Carimbo de hora:

Mais de Vida de chatbots - médio