Which technologies should be considered for making chat applications like Messenger and WhatsApp?
Building a chat application like whatsapp, fb messenger, hike, etc involves quite some setup but to get an idea in the most simplest manner, read below.
The whole setup is split into 3 blocks .
- Client facing app
- Messaging Channel
- Server setup/infra to handle messaging transactions at scale
In summary the tech involved would be
Client facing app
- App ( which involves all the UI and basic UX, Android/iOS/Windows) [You can use libraries here]
- Database to save data in device/work offline [SQLite/Realm]
- Manage states for the device (i.e network change, calls ,etc) and respond for messaging based events [API dependent and available in target OS]
- Maintain a connection with the server ( via Sockets, XMPP, MQTT)
- Push Notifications[Firebase Cloud Messaging, Urban Airship, One Signal]
- [optional] Media ( video/picture) and location feature [Google Maps SDK, Android Media Framework API]
- 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)
- 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, maintaining the messaging logic
- Setup topics to manage delivering messages as well as push notes
- Database management
- Error Handling to be resilient to messages being lost and error in network
- [optional] Set up end-to-end encryption , to maintain user privacy, if not ..make sure data is not sent in plain text over the air.
- To handle all the above you have to
- Code the logic in one of the server side language. Possible contenders would be NodeJS, Erlang, etc.
- Have a cloud infrastructure , possibly Google Cloud Platform/AWS/Azure
- API Specifications based of protocol(MQTT/XMPP/SOckets) used for messaging
- Database could be NoSQL – Mongodb/Aerospike or SQL
- End-to-End encryption via the open source tech available OpenWhisper Systems
P.S : This is a simple answer , the stuff that goes on is complex and involves a lot of understanding on how to manage messages.
This post was originally published on Quora here.
With the rise in competition wherein chat and messaging is playing a vital role for various businesses it becomes imperative for every application to have an established real-time communication channel. On top, it is just matter of minutes to integrate such an awesome user-friendly functionalities/features with readily available chat and messaging SDKs like Applozic.