美文网首页
IM中客户端应用层心跳包的由来

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

作者: Scott丶Wang | 来源:发表于2018-04-11 22:53 被阅读19次

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

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

    2.长连接

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

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

    相关文章

      网友评论

          本文标题:IM中客户端应用层心跳包的由来

          本文链接:https://www.haomeiwen.com/subject/lbrtkftx.html