Que tecnologias devem ser consideradas para fazer aplicações de chat como o Messenger e o WhatsApp?
Construir uma aplicação de chat como o whatsapp, fb messenger, hike, etc. envolve alguma configuração, mas para ter uma ideia da forma mais simples, leia abaixo.
A configuração completa é dividida em 3 blocos .
<- Client facing app>li>Messaging Channel>li>Server setup/infra to handle messaging transactions at scale
Client facing app
- >li>App ( que envolve toda a UI e a UX básica, Android/iOS/Windows) [Você pode usar bibliotecas aqui]>li>Base de dados para salvar dados no dispositivo/trabalho offline [SQLite/Real]li>li>Gerenciar estados para o dispositivo (i.e mudança de rede, chamadas, etc.) e responder para eventos baseados em mensagens [API dependente e disponível no SO de destino]>li>Manter uma conexão com o servidor ( via Sockets, XMPP, MQTT)li>li>Push Notifications[Firebase Cloud Messaging, Urban Airship, One Signal]
- [optional] Media ( video/picture) and location feature [Google Maps SDK, Android Media Framework API]
Channel
- Choose from Socket, XMPP or MQTT [Could be a mix of them too, depending on use case]
- Make sure of the use case ,
- mqtt is for mobile devices and iot (preferred, refer to Paho Project)
- socket if you have desktop app (preferred)
- xmpp can work in both depending on the scale (GCM uses this)
Server
- Setup an infra that takes care of saving messages as they come/go
- Load balancing on the server to manage scale when the number of connections increase/decrease
- Id management to know which connection to use between two Id, mantendo a lógica de mensagens>li>Tópicos de configuração para gerenciar a entrega de mensagens, bem como notas de empurrar>li>Gerenciamento de banco de dadosli>li> Manuseio de erros para ser resistente a mensagens perdidas e erros na rede>li>[opcional] configuração de criptografia de ponta a ponta , para manter a privacidade do usuário, se não ..certifique-se de que os dados não são enviados em texto puro por via aérea.
>br>br>Para lidar com tudo o que foi dito acima, você tem que- >li>##li>Code a lógica em um dos idiomas do lado do servidor. Os possíveis concorrentes seriam NodeJS, Erlang, etc.>li>li>Have a cloud infrastructure , possivelmente Google Cloud Platform/AWS/Azureli>li>API Specifications based of protocol (MQTT/XMPP/SOckets) used for messagingli>li>Database could be NoSQL - Mongodb/Aerospike or SQL>li>End-to-End encryption via the open source technology available OpenWhisper Systems>/ol>>>p>P.S : Esta é uma resposta simples , o que acontece é complexo e envolve muita compreensão de como gerenciar mensagens.