Whatsapp usa mqtt

Nos bastidores de aplicativos de bate -papo

Existem muitos aplicativos de bate -papo em uso, mas apenas alguns deles se destacam por causa das qualidades que eles têm, que atraem usuários. Dois dos melhores aplicativos de bate -papo são considerados facebook messenger e whatsapp. Embora essas empresas sejam discretas sobre a arquitetura de suas aplicações, consegui encontrar informações sobre artigos e fóruns de blogs. Esta é uma composição deles, e esses fatos podem ser desatualizados, pois todas essas aplicações tendem a ser atualizadas com frequência.

1. Facebook Messenger

O Messenger do Facebook é um dos aplicativos de bate -papo mais populares. Vários anos atrás, o Messenger não estava em sua melhor forma. Seu desempenho e uso de espaço estavam começando a ficar para trás. O Mensageiro estava usando um modelo baseado em tração. Cada vez que o aplicativo era reconhecido com uma notificação leve de push sobre a disponibilidade de novas mensagens e, em seguida, o aplicativo puxaria e recebia uma resposta pesada de JSON contendo a visão da conversa. Mais tarde, porém, o Messenger foi atualizado para usar um instantâneo baseado em push + modelo delta.
Pontos chave:

  1. Messenger costumava ter problemas de desempenho e uso de espaço.
  2. Inicialmente, usou um modelo baseado em tração para recuperação de mensagens.
  3. Mais tarde, ele mudou para um modelo de instantâneo + delta baseado em push +.

Questões:

  1. Quais foram os problemas com o Messenger inicialmente?
  2. Para qual modelo o Messenger mudou para recuperação de mensagens?

Respostas:

  1. Messenger tinha problemas de desempenho e uso de espaço.
  2. O Messenger mudou de um modelo baseado em tração para um instantâneo baseado em push + modelo delta.

2. Whatsapp

Whatsapp é baseado na pilha Lyme/Lyce.
Dentro dos bastidores do WhatsApp, uma das coisas mais fascinantes e importantes é o back-end em Erlang. Erlang tem uma enorme contribuição para tornar o WhatsApp um dos melhores aplicativos de bate -papo do mundo.
“Por que Erlang?”
Erlang é uma linguagem de programação funcional de uso geral, concorrente. As áreas em que Erlang é conhecido por ser útil estão lidando com muitas conexões e mensagens de roteamento, dados alguns aspectos da mensagem. Como Erlang mostra um ótimo desempenho nesses cenários, a maioria dos aplicativos relacionados a telecomunicações usa Erlang em suas implementações.
A implementação inicial do servidor WhatsApp foi feita usando o Ejabberd, que é um servidor de mensagens instantâneas de código aberto/xmpp escrito em Erlang. O protocolo de mensagens usado para a implementação é o XMPP (protocolo extensível de mensagens e presença).
Outro aspecto importante de um aplicativo de bate -papo é o banco de dados. Na maioria das vezes, o banco de dados pode se tornar um gargalo de desempenho em aplicativos de mensagens em tempo real. Whatsapp usa mnesia, que é conhecido por ser um DBMS de comunicação distribuído em tempo real. Um dos aspectos importantes da mnesia é que ela pode ser reconfigurada em tempo de execução.
Embora o WhatsApp seja considerado bastante simples quando comparado aos serviços do Messenger como o Facebook Messenger, seu design não é simples. O diagrama a seguir mostra uma visão muito abstrata da arquitetura do WhatsApp.

Automação doméstica baseada no WhatsApp: Bridging de protocolo com MQTT

Neste artigo, estaremos controlando dispositivos que não suportam o Whatsapp, mas suportam outros protocolos de comunicação como MQTT, TCP, IMAP, etc. Se uma casa for instalada com dispositivos de automação residencial que não suportam o WhatsApp, nos comunicaremos com esses dispositivos (controladores) usando protocolos suportados por esses dispositivos. Assim, poderemos controlar os eletrodomésticos conectados a esses dispositivos.
Componentes necessários:

  • API do WhatsApp baseada em Python – Yowsup
  • Biblioteca MQTT – Paho
  • Python ID
  • Arduino IDE

Insights técnicos:
A ponte de protocolo também pode controlar dispositivos que não suportam a API do WhatsApp. Isso significa que simplesmente enviaremos os dados de um protocolo para outro. Este artigo demonstrará MQTT e WhatsApp Bridge para controlar os dispositivos.
Diagrama de bloco:

Toda a comunicação será através de um script python, instalado em um sistema baseado em Linux. O script Python terá a API do WhatsApp e a biblioteca MQTT para se comunicar com os dois protocolos. O script pode enviar e receber mensagens no WhatsApp e MQTT.
Questões:

  1. Quais são os componentes necessários para a automação residencial baseada no WhatsApp com MQTT?
  2. Qual é o objetivo da ponte de protocolo na automação residencial?

Respostas:

  1. Os componentes necessários para a automação residencial baseada no WhatsApp com o MQTT são a API do WhatsApp baseada em Python (YOWSUP), MQTT Library (PAHO), Python ID e Arduino IDE.
  2. A ponte de protocolo permite a comunicação e o controle de dispositivos que não suportam a API do WhatsApp enviando dados de um protocolo (e.g., Mqtt) para outro.

Whatsapp usa mqtt

Depois que a conexão é bem -sucedida, podemos enviar mensagens usando isso
publicar.único (tópico, message_data, hostname =”corretor.Hivemq.com”)

Nos bastidores de aplicativos de bate -papo

Existem muitos aplicativos de bate -papo em uso. Mas apenas alguns deles se destacam por causa das qualidades que eles têm que atrai os usuários. Dois desses melhores aplicativos de bate -papo são considerados facebook messenger e whatsapp. Embora essas empresas sejam discretas sobre a arquitetura de suas aplicações, consegui encontrar informações sobre artigos e fóruns de blogs. Esta é uma composição deles e esses fatos podem ser desatualizados, pois todas essas aplicações tendem a ser atualizadas com frequência.

1. Facebook Messenger

Facebook’S Messenger é um dos aplicativos de bate -papo mais populares. Vários anos atrás, Messenger não era’t nele’é a melhor forma. Isto’O desempenho e o uso do espaço estavam começando a ficar para trás. O Mensageiro estava usando um modelo baseado em tração. Cada vez, o aplicativo era reconhecido com uma notificação leve de push sobre a disponibilidade de novas mensagens e, em seguida, o aplicativo puxaria e recebia uma resposta pesada de JSON contendo a visão da conversa. Mas o Messenger posterior foi atualizado para usar um instantâneo baseado em push + modelo delta.

MQTT é um protocolo de conectividade de máquina para máquina (M2M). Foi projetado como um transporte de mensagens de publicação/subscrição extremamente leve – mqtt.org

Outra mudança interessante que foi feita na infraestrutura mensageira está mudando de JSON para THRIFT. Esta grande mudança causou uma redução no tamanho da carga útil em 50%.

Houve melhorias significativas feitas no lado severo também. Anteriormente, cada mensagem foi escrita para uma camada de armazenamento tradicional antes de enviar um gatilho para o Messenger para ler a mensagem da camada de armazenamento, o que tornou problemático a escala problemática. Mas o processo foi completamente substituído usando uma implementação de fila ordenada criada pelo próprio Facebook chamado “Íris”. Uma das características interessantes da íris é o uso de ponteiros que facilita a sincronização de mensagens entre o Messenger e a camada de armazenamento. A imagem a seguir mostra claramente como a sincronização de mensagens acontece no mensageiro

O procedimento descrito acima foi capaz de remover a dependência da entrega de mensagens sobre a disponibilidade e a velocidade de escrita da camada de armazenamento em uso. Iris armazena as mensagens temporariamente nele’está apoiando o armazenamento até que todas as mensagens sincronizem corretamente.

Outro fato interessante é que o armazenamento de íris foi construído usando MySQL e Flash.

2. Whatsapp

Whatsapp é baseado em pilha Lyme/Lyce.

Dentro dos bastidores do WhatsApp, uma das coisas mais fascinantes e importantes é o back -end em Erlang. Erlang tem uma enorme contribuição para tornar o WhatsApp um dos melhores aplicativos de bate -papo do mundo.

Por que Erlang ?

Erlang é uma linguagem de programação funcional de uso geral, concorrente. As áreas onde Erlang é conhecido por serem úteis são

> Lidando com muitas conexões

> Mensagens de roteamento dadas alguns aspectos da mensagem

Como Erlang mostra um ótimo desempenho nos cenários especificados, a maioria dos aplicativos relacionados a telecomunicações usam Erlang em suas implementações.

A implementação inicial do servidor WhatsApp foi feita usando Ejabberd. Que é um servidor de mensagens instantâneas de jabber/xmpp de código aberto escrito em Erlang. O protocolo de mensagens usado para a implementação é o XMPP (protocolo extensível de mensagens e presença).

Outro aspecto importante de um aplicativo de bate -papo é o banco de dados. Na maioria das vezes, o banco de dados pode se tornar um gargalo de desempenho em aplicativos de mensagens em tempo real. Whatsapp usa mnesia, que é conhecida por ser uma comunicação distribuída em tempo real DBMS. Um dos aspectos importantes da mnesia é que ela pode ser reconfigurada em tempo de execução.

Embora o WhatsApp seja considerado bastante simples quando comparado aos serviços do Messenger como o Facebook Messenger, isso’s design isn’T simples. O diagrama a seguir mostra uma visão muito abstrata da arquitetura do WhatsApp,

Automação doméstica baseada no WhatsApp: Bridging de protocolo com MQTT

Neste artigo, estaremos controlando dispositivos que não suportam o Whatsapp, mas suportam outros protocolos de comunicação como MQTT, TCP, IMAP, etc. Se uma casa for instalada com dispositivos de automação residencial que não suportam o WhatsApp, nos comunicaremos com esses dispositivos (controladores) usando protocolos suportados por esses dispositivos.

Assim, poderemos controlar os eletrodomésticos conectados a esses dispositivos.

Componentes necessários

Ferramentas necessárias/ bibliotecas necessárias

API do WhatsApp baseada em Python-Yowsup
Biblioteca MQTT – Paho
Python ID
Arduino IDE

Insights técnicos
A ponte de protocolo também pode controlar dispositivos que não suportam a API do WhatsApp. Isso significa que simplesmente enviaremos os dados de um protocolo para outro. Este artigo demonstrará MQTT e WhatsApp Bridge para controlar os dispositivos.

Diagrama de bloco

Figura 1 WhatsApp e MQTT Protocol Bridging

Toda a comunicação será através de um script python, instalado no sistema baseado em Linux. O script Python terá a API do WhatsApp e a biblioteca MQTT para se comunicar com os dois protocolos.

O script pode enviar e receber mensagens no WhatsApp e MQTT.

Um microcontrolador (ATMEGA 328p) está conectado aos eletrodomésticos por meio de circuitos de retransmissão. Para fins de comunicação, o ESP está conectado ao microcontrolador.

O ESP é instalado com código que recebe mensagens em um tópico específico e envia comandos para o microcontrolador através do UART serial.

Então, agora quando qualquer usuário envia mensagens no WhatsApp, ele vai para o microcontrolador através do nosso script python.

Diagrama de circuito
Esta placa está conectada a um interruptor de luz com um circuito de relé. Também podemos pegar o Arduino UNO Board em vez da placa personalizada 328.

Como o sistema funciona
Quando um usuário envia uma mensagem para o nosso sistema Linux no WhatsApp, o script lê a mensagem. O dispositivo IoT, que suporta o protocolo MQTT, ouve as mensagens em um tópico específico. Essas mensagens comandam o dispositivo para ativar e desativar um aparelho.

Então, agora as mensagens lidas pelo script python são digitalizadas para comandos se for encontrado. Comandos específicos são enviados para o dispositivo no protocolo MQTT. Quando o dispositivo lê esses comandos, ele age sobre eles girando altos altos (ligados), baixo (desligado)

Compreendendo o código -fonte
Temos dois tipos de código -fonte, um para Arduino + ESP e outro para o script python instalado no Linux.

Código para Arduino
Arduino está instalado com um código que recebe dados sobre seriados. Quando o string específico é recebido como “SOBRE” Ele ligará o pino do relé (alto) e ao receber “DESLIGADO” Desliza o relé.

if (rec == “SOBRE”)
DigitalWrite (revezamento, alto);
Serial.imprimir(“Relé está ligado”);
rec = “”;
>
if (rec == “DESLIGADO”)
DigitalWrite (revezamento, baixo);
Serial.imprimir(“Relé está desligado”);
rec = “”;
>

Código para ESP
ESP está conectado com Arduino em uma porta serial e também assinada em um tópico MQTT para receber dados dele. Basicamente, ele envia os dados recebidos no tópico MQTT para a porta serial e dados do tópico serial para o MQTT.

Para saber mais sobre ESP e MQTT, consulte nossos artigos anteriores.

Código para script Python

O script python está instalado com “Yowsup” API do WhatsApp para ler e enviar mensagens do WhatsApp. Existem dois arquivos neste script correr.py e camada.py.

Entendendo a execução do arquivo.py
Vamos ligar para nossas bibliotecas no topo do arquivo
de yowsup.Pilhas importam yowstackbuilder
de yowsup.camadas.Auth Import authError
de yowsup.As camadas importam yowlayerent
de yowsup.camadas.Importação de rede Yownetworklayer
de yowsup.Env importar yowsupenv

Também anexaremos o arquivo de camada na parte superior, porque a classe principal “ECHOLAYER” existe dentro desse arquivo.
da Echolayer de importação de camadas

Podemos nomear o arquivo da camada, mas temos que colocar o mesmo nome aqui.

Dentro de py, Declararemos nossa principal variável para senha e eventos que queremos ocorrer.
credenciais = (“91xxxxxxxxxx”, “Hkhwvw5/wnr493hxk8nkl/htpno =”)

Agora passamos para a camada e construímos a pilha. Além disso, o loop que manterá a conexão ao vivo é chamado.
pilha.SetCredentials (credenciais)
pilha.BroadcastEvent (YOWLAYEREVENT (YOWNOWORKLAYER.Event_state_connect)) #SENHANDO O SINAL DE CONECT
pilha.loop () #Este é o programa principal do programa

Entendendo a camada de arquivo.py
Este arquivo contém a biblioteca do protocolo para MQTT e é capaz de receber mensagens do WhatsApp.

Subestimando como as mensagens são recebidas do WhatsApp
Este arquivo contém a classe que receberá quaisquer mensagens recebidas para esse número, e essa será uma entidade de retorno de chamada para que qualquer outro loop possa ser executado dentro do arquivo.
@ProtocolentityCallback (“mensagem”)
DefnMessage (self, messageprotocolentity):
se for verdade:

Dados da mensagem e formulário de número do qual a mensagem veio pode ser obtida abaixo.
Incomming_Message_Data = MessageProtocolentity.getbody ()

Isso receberá o corpo da mensagem que é a mensagem real. Ele armazenará em uma variável de string “Incomming_Message_Data”
Incomming_Message_sender = MessageProtocolentity.ganhar()

Esta linha armazenará o número de contato da mensagem de entrada na variável string “Incomming_Message_sender”

Compreendendo as camadas MQTT para enviar e receber
Primeiro de tudo, importaremos bibliotecas necessárias para o MQTT.
Importar Paho.mqtt.Cliente como MQTT
Importar Paho.mqtt.Publique como publicação

Agora, declararemos uma variável denominada cliente com o MQTT Client.
cliente = mqtt.Cliente()

Agora faremos dois retornos de chamada de função 1. Para receber mensagens, 2. Fazendo algo em conexão bem -sucedida.
cliente.ON_CONNECT = ON_CONNECT
cliente.on_message = on_message

Por fim, nos conectaremos ao corretor MQTT em uma porta e iniciaremos o cliente dentro de um loop não bloqueador
cliente.conectar(“corretor.Hivemq.com”, 1883, 60)
cliente.loop_start ()

Depois que a conexão é bem -sucedida, podemos enviar mensagens usando isso
publicar.único (tópico, message_data, hostname =”corretor.Hivemq.com”)

Quando qualquer mensagem é recebida no WhatsApp, ela é armazenada em uma string e, em seguida, essa string é digitalizada para algumas palavras -chave que definem essa mensagem como um comando para ligar/desligar a luz.
Elif (“luzes acesas” em Incomming_MSG): #DO algo na partida

Se a condição for correspondente, enviamos o comando de controle para o corretor MQTT.
publicar.solteiro(“TS/luz”, “SOBRE”, hostName =”corretor.Hivemq.com”)

Quando qualquer mensagem não reconhecida foi recebida, a mensagem no WhatsApp responde que isso é inválido.

E é assim que podemos usar a ponte do protocolo para controlar dispositivos com o WhatsApp.

xanecs/axioma

Este compromisso não pertence a nenhum ramo neste repositório e pode pertencer a um garfo fora do repositório.

Switch Branches/Tags

Tags de ramificações

Não foi possível carregar ramificações

Nada para mostrar

Não foi possível carregar tags

Nada para mostrar

Nome já em uso

Uma tag já existe com o nome da filial fornecida. Muitos comandos Git aceitam nomes de tag e ramificação; portanto, criar este ramo pode causar comportamento inesperado. Tem certeza que deseja criar este ramo?

Cancelar Criar

  • Local
  • Codespaces

Https github cli

Use Git ou Checkout com SVN usando o URL da Web.

Trabalhe rápido com nossa cli oficial. Saiba mais sobre a CLI.

Autenticação necessária

Faça login para usar os espaços de codificina.

Lançando o GitHub Desktop

Se nada acontecer, faça o download do GitHub Desktop e tente novamente.

Lançando o GitHub Desktop

Se nada acontecer, faça o download do GitHub Desktop e tente novamente.

Lançando Xcode

Se nada acontecer, faça o download do Xcode e tente novamente.

Lançando o código do Visual Studio

Seu espaço de código será aberto uma vez pronto.

Houve um problema para preparar seu espaço de código, por favor tente novamente.

Última confirmação

Estatísticas Git

arquivos

Falha ao carregar informações mais recentes de compromisso.

Última mensagem de confirmação

Comprometer o tempo

Leia-me.MD

Axiom é um programa Python que se conecta a um servidor MQTT e fornece uma interface ao serviço de mensagens do WhatsApp.

  1. Clone este repo.
  2. Instalar dependências

pip install yowsup2 paho-mqtt 

  1. Editar Waserver/Config.py . Credenciais podem ser necessárias da CLI YOWSUP2. Veja aqui.
  2. Correr

python waserver/waserver.py 

  1. Crie um Washerver/Config-Prod.py
  2. A construção da imagem com o Dockerfile fornecido . Os arquivos de configuração separados permitem diferentes configurações de desenvolvimento/produção.

Para receber mensagens, assine o WhatsApp/ . Uma mensagem ficará assim:

< "telefone": "4915112345678", "mensagem": "Olá de um ser humano!" >

O número de telefone neste exemplo normalmente seria escrito +49 151 12345678 . Para mensagens em grupo, o número de telefone está no formulário 4915112345678-1400000000 (número de telefone do criador do grupo e registro de data e hora da Unix).

Para enviar mensagens, publique para o WhatsApp/saída:

< "telefone": "4915112345678", "mensagem": "Olá de um bot!" >

Atualmente, há apenas sob comando implementado

Para receber informações do grupo (membros, título), publique no whatsapp/cmd

< "CMD": "group_info", "telefone": "4915112345678-1400000000", "ligar de volta": "Any_string_here" >

O retorno de chamada será usado para identificar a resposta a este comando. É aconselhável usar um UUID para isso. A resposta será publicada no tópico WhatsApp/IQ:

< "CMD": "group_info", "ligar de volta": "Any_string_here", "GroupID": "4915112345678-1400000000", "Participantes": < "4915112345678": "admin", "4915187654321": nulo, >, "assunto": "Exemplo de grupo" >

Sobre

MQTT-interface para o serviço de mensagens do WhatsApp

Como o WhatsApp fila suas mensagens?

Elo lá, companheiro! Isto&rsquo;São quase dois anos da pandemia em alguns meses, e a maneira como adaptamos nossos estilos de vida, oh garoto! Todos ficamos conectados e até fizemos nosso trabalho usando várias plataformas de mensagens. O uso de várias plataformas, incluindo WhatsApp, Instagram e Facebook, aumentou significativamente. Whatsapp foi o que é o maior uso, e com a Índia sendo o Whatsapp&rsquo;s maior mercado este ano! Mas você sabia que o WhatsApp usa uma das estruturas de dados básicas, fila, que é usada por esta plataforma de mensagens para entregar suas mensagens com sucesso?

O que é fila?

Uma fila, como o nome indica, é exatamente como a da vida real. Uma fila tem duas extremidades, uma cabeça e uma cauda, ​​e os itens são adicionados apenas na extremidade traseira e removidos da extremidade da cabeça. Imagine um grupo de pessoas esperando em uma fila para pegar pizza, e a primeira pessoa que chegou lá, eu.e., o primeiro da linha, teria preferência e seria o único a receber a pizza ou ser &ldquo;empurrado.&rdquo; Este conceito tecnicamente é conhecido como FIFO ou primeiro na primeira saída.

O que é uma fila de mensagens?

Como indicativo do título, uma fila de mensagens é uma fila cheia de mensagens. Este serviço assíncrono é usado para transferir mensagens ou dados entre duas pessoas ou um grupo de pessoas. A pessoa que envia a mensagem para a fila é o produtor, e quem recebe a mensagem é o consumidor. Da fila&rsquo;S Ponto de vista, uma mensagem é apenas uma coleção de bytes e pode ser qualquer coisa, desde uma mensagem de texto normal ou uma mensagem que contém um cliente&rsquo;s ID do pedido ou até uma mensagem de erro.

  • Em um sistema de fila de mensagens, existem vários servidores conhecidos como corretores. Esses corretores são altamente confiáveis ​​e escaláveis ​​e formam um cluster. Depois que uma mensagem é produzida ou enviada do lado do produtor, a mensagem é armazenada na fila de mensagens até que o consumidor esteja disponível para receber as mensagens.
  • Uma vez que o consumidor ou o destinatário esteja disponível para transmitir a mensagem, a fila empurra a mensagem ao consumidor e aguarda o consumidor para processar a mensagem totalmente.
  • Após o consumidor processa a mensagem, ele é totalmente excluído da fila.

Soluções de fila de mensagens

Existem vários softwares de código aberto e livre que são usados ​​para fila de mensagens.

Kafka: Apache Kafka&rsquo;S Sistema de Mensagens é um sistema de inscrição de publicação bem pensado e um sistema de filas que pode lidar com volumes muito altos de dados. Kafka é tolerante a falhas e monitora constantemente os nós através de vários serviços, tornando-se eficiente trabalhar com.

Rabbit MQ: O RabbitMQ é um dos sistemas de corretores de mensagens de código aberto mais utilizados que implementaram originalmente o avançado Protocolo de fila de mensagens (AMQP). As filas são um único fio neste sistema, e uma fila pode lidar com até 50.000 mensagens.

Amazon Sqs: Amazon Simples Filte Service é um sistema de fila de mensagens distribuído usado para dissociar vários microsserviços e aplicativos sem exigir que eles mantenham suas filas de mensagem. O Amazon SQS também fornece uma API de serviço da Web que os usuários podem acessar usando linguagens de programação comuns.

ActiveMQ: ActiveMQ é outro sistema de corretor de mensagens escrito em Java e possui um cliente completo de serviço de mensagem Java. Possui suporte de Ajax e REST embutido e suporta vários protocolos como AMQP, MQTT, Stomp, etc.

Como o WhatsApp entrega suas mensagens?

Antes de entrarmos em como as mensagens estão na fila no WhatsApp, vamos&rsquo;está entendendo o próprio aplicativo. Codificado usando a linguagem de programação Erlang, o WhatsApp é o mais usado com quase 2 bilhões de usuários mensais. O WhatsApp usa o protocolo de mensagens e presença extensível de código aberto (XMPP) para facilitar mensagens instantâneas entre duas partes. Inicialmente, o WhatsApp começou usando o servidor Ejabbered. Com um número tão alto de usuários diariamente, é essencial que os servidores lidam com a carga com eficiência e o sistema seja confiável. Nos anos, o código foi reestruturado, mudando de XMPP para um protocolo de design internamente e modificando alguns componentes principais para melhorar e obter o melhor desempenho do servidor.

Como e quando você envia uma mensagem, ela é filmada no servidor até que o receptor se reconecte para recuperar essas mensagens. Então, quando você envia uma mensagem de texto para seu amigo, e se eles não&rsquo;T tenho acesso à Internet para receber as mensagens, essas mensagens são filas nos servidores do WhatsApp, e esse processo é conhecido como o &ldquo;armazenar e avançar&rdquo; mecanismo. Somente quando o receptor aceita as mensagens, eles são limpos do servidor e excluídos da fila. Mais tarde, quando o receptor tem uma conexão com a Internet, essas mensagens são entregues a eles ou são recuperadas pelo receptor. Quando o destinatário finalmente reconhece que a mensagem foi recebida, a recuperação bem -sucedida da mensagem é enviada de volta ao servidor do WhatsApp, e é aí que você vê a marca dupla ao lado de suas mensagens.

Essas estruturas de dados dão muito tempo, e ter um bom entendimento disso levará um longo caminho também. Então, da próxima vez que seu professor começar a discutir estruturas de dados, preste boa atenção lá. Sim? OK?

Bem, então vejo você na próxima vez!