Hope this does not get too technical or long winded....
It is important to understand the underlying mechanism of how both gmail and whatsapp work.
Both rely on the fact that your phone will make a data connection or session with a server on the internet, either via your mobile data or WiFi connection.
While this server connection is active or "established", data can be sent between your phone and the server.
Barring other network connectivity, or performance issues, for gmail or whatsapp to appear "instant" both you and I (our phones) have to have an active connection to the server at the same time. If we send each other emails or whatsapp messages, the response should be within a few seconds.
If however, one of us does not have an active connection at that moment, the system becomes "store and forward", where if I send a message to you now, it will be held on the server until it sees you make a connection. It can then "push" the message to you or respond to your request (poll) for new messages.
Neither gmail or whatsapp make persistent connections to their respective servers.
This can be observed using Android OS Monitor 1.1.8 for example, or any app that can show you active data connections from your phone to the internet.
The connection is considered active if showing a status of "ESTABLISHED".
If you look at the connections for gmail and whatsapp, you will see they remain active for a period of time before changing to "CLOSE_WAIT" and finally disappearing. The connections will reappear when gmail or whatsapp try and "sync" with their servers once again, or you actually try and send a whatsapp message or gmail email. The user does not appear to be able to set this sync interval period for some reason. (maybe to stop all users setting sync = 1 second and bombarding the servers with requests)
Too frequent sync attempts would probably have a negative impact on battery life and escalate data costs.
Without these connections being active or established, there can be no "push" operation from the server to your phone, for either whatsapp or gmail.
As ginggs indicated, a true "push" would require your phone to either have an established server connection, or to actively be "listening" to a specific TCP port on your IP data connection.
Considering neither Cell C or Vodacom (except by application only) allow inbound connections from the internet to your phone IP address by default, (See the Unrestricted APN thread) there is no way your phone will respond to any "push" type connection from an internet server. Not sure if the same applies to mtn or 8ta.
Whatsapp and gmail would have to have a small active "listener" permanently running on your phone to achieve true "push" notification.
I have not observed such active "listeners" at all and even if there were, as I have said the standard "internet" APN blocks such traffic anyway.
I think the use of the word "instant" in Instant Messaging (IM) is a bit of a misnomer as the only way that can be achieved is for both parties or clients to have an active or established phone to server connection at the same time. "Push" is also be used a bit too liberally as it creates expectation of "instant" response, when that is in fact not the case.
So, in summary I think you can only expect to see responses within the seconds time frame, if both you and the other party have active and established connections at the same time to the respective server (or array of servers) providing gmail or whatsapp services.
Assuming you have mobile data on and background sync enabled, with no strange battery saver apps disabling these for you, sometimes you get lucky and your emails and messages between yourself and friends seem "instant" and other times it seems things are broken, but it's all just a case of simultaneous server data connections or not.
I have checked and noted this on both the Cell C and Vodacom networks.
I don't believe this to be related to a network problem as such, but rather by design of the gmail and whatsapp underlying connectivity and functionality.
.
.
.
Oi! You in the back there...wake up!
