This article is written with the help of multiple Google searches.
The thought
How does the GCM protocol work?
- The user opens an app that uses GCM.
- The app registers the device with the GCM server.
- The user performs an action in the app that triggers a push notification.
- The app sends an XMPP message to the GCM server with the device’s registration ID and the payload of the notification.
- The GCM server forwards the XMPP message to the device.
- The device receives the XMPP message and displays the notification to the user.
Why WebSockets are not used here? Why XMPP is used?
- Battery life: WebSockets require a persistent connection between the client and the server. This can drain the battery life of mobile devices.
- Resource usage: WebSockets can be more resource-intensive than other protocols, such as XMPP. This can be a problem for servers that need to handle a large number of concurrent connections.
- Efficiency: XMPP is a very efficient protocol. It can deliver messages with very low latency and overhead.
- Resource usage: XMPP is very lightweight and does not require a lot of resources. This makes it a good choice for mobile devices and servers.
How can XMPP deliver messages at very low latency while websocket cannot?
One key technique is that XMPP uses a decentralized architecture. This means that there is no single server that controls the XMPP network. Instead, XMPP servers are interconnected in a peer-to-peer fashion. This allows XMPP messages to be routed between servers quickly and efficiently.
You can read more here:Â https://developer.ibm.com/tutorials/x-xmppintro/
Now, the most awaited question. Think that Shouman’s device is connected to the FCM server and he is on the move, changing from network tower to tower. The bus’s WiFi is unstable. So he is also switching from wifi to mobile data, he is crazy!!! In this situation we all are! How Firebase SDK is optimizing battery here? 🔌⚡🪫
As I have mentioned before firebase uses XMPP (sort of) for their push notifications. When a device is continuously changing its IP, XMPP will work by using a feature called session restoration. Session restoration allows a device to reconnect to an XMPP server and resume its session, even if its IP address has changed. When the device changes its IP address, it sends a message to the XMPP server with its new IP address and RID. The XMPP server then updates the device’s session information. The next time the device connects to the XMPP server, it sends its RID. The XMPP server then looks up the device’s session information and restores the session. Session restoration ensures that devices can stay connected to XMPP servers even if their IP addresses change. This is important for mobile devices, which often change IP addresses when they move between different networks.
XMPP session restoration is more efficient than making a new connection for several reasons:
- Reduced overhead: Session restoration does not require the device to establish a new TCP connection with the XMPP server. This can save a significant amount of time and battery life, especially on mobile devices.
- Reduced latency: Session restoration allows the device to resume its session with the XMPP server immediately. This reduces the latency of message delivery, which is important for applications like instant messaging.
- Preserved state: Session restoration preserves the device’s state on the XMPP server. This includes things like the device’s presence information and contact list. This can save the device time and energy, as it does not need to re-establish this information when it reconnects to the server.
- Improved reliability:Â Session restoration is more reliable than making a new connection. This is because it is less likely that the device will lose its connection to the XMPP server while it is restoring its session. This is important for applications that need to be highly reliable, such as VOIP and video conferencing.
You may compare this to WebSocket or HTTP/2, but when you create a new WebSocket connection, you are establishing a new TCP connection between your client and the server. This can be expensive in terms of time and resources, especially on mobile devices.
When you restore an XMPP session, you are reusing an existing TCP connection. This is much more efficient, and it also allows you to resume your session immediately without having to re-authenticate.