IM中客户端应用层心跳包的由来

客户端从服务器获取最新数据(别人有没有给我发消息了)?
两种方式:
1.轮询

客户端定期询问服务器有没有新的消息, 这样服务器不用管客户端的地址是什么, 客户端来问, 直接告诉它就行,这种方案最简单, 对于一些不追求实时性的客户端来说, 很适合, 只需要把时间间隔设定成几个小时取一次, 就能很方便的解决问题.但对于即时通讯产品来说, 这种方案完全不能用. 假设即时通讯软件在网络畅通的情况下发送的消息要求对方10s内就能收到, 如果用轮询, 那么客户端要每隔5s连一次服务器, 如果在移动端, 手机的电量和流量很快就会被消耗殆尽。

2.长连接

这大概是目前情况下最佳的方案了, 客户端主动和服务器建立TCP长连接之后, 客户端定期向服务器发送心跳包, 有消息的时候, 服务器直接通过这个已经建立好的TCP连接通知客户端.

参考资料:
iOS即时通讯进阶 – CoacoaAsyncSocket源码解析
Android端消息推送总结:实现原理、心跳保活、遇到的问题等
新手入门一篇就够:从零开发移动端IM
为什么说基于TCP的移动端IM仍然需要心跳保活?

你可能感兴趣的:(IM中客户端应用层心跳包的由来)