美文网首页
iOS 消息推送方案对比

iOS 消息推送方案对比

作者: iOS104 | 来源:发表于2017-06-15 00:44 被阅读224次

    应用场景

    社交聊天,直播弹幕,多玩家游戏,金融股票,体育直播,位置变化,智能家居

    轮询

    长轮询与短轮询的区别
    • 短轮询去服务端查询的时候,不管服务端有没有变化,服务器就立即返回结果了。
    • 长轮询则不是,在长轮询中,服务器如果检测到库存量没有变化的话,将会把当前请求挂起一段时间(这个时间也叫作超时时间,一般是几十秒)。
    • 在这个时间里,服务器会去检测库存量有没有变化,检测到变化就立即返回,否则就一直等到超时为止,这就是区别。
    长短连接的区别
    • 一个 TCP 连接是否为长连接,是通过设置 HTTP 的 Connection Header 来决定的,而且是需要两边都设置才有效。
    • 长短连接是传输层概念
    • 轮询方式是否为长轮询,是根据服务端的处理方式来决定的,与客户端没有关系

    MQTT

    MQTT 协议是为大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议
    协议简单,流量少;订阅+推送模式,非常适合Uber、滴滴的小车轨迹的移动,智能家居。

    它具有以下主要的几项特性:

    • 非常小的通信开销(最小的消息大小为 2 字节),小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量。
    • 支持各种流行编程语言(包括 C,Java,Ruby,Python 等等)且易于使用的客户端;
    • 使用发布 / 订阅消息模式,提供一对多的消息发布,解除应用程序耦合。
    • 对负载内容屏蔽的消息传输。
    • 使用 TCP/IP 提供网络连接。
    • 有三种消息发布服务质量,让消息能按需到达目的地,适应在不稳定工作的网络传输需求 :
      • "至多一次",消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
      • "至少一次",确保消息到达,但消息重复可能会发生。
      • "只有一次",确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。
    • 使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制。

    WebSocket

    概念

    • WebSocket是 HTML5 开始提供的一种浏览器与服务器间进行全双工通讯的网络技术。
    • WebSocket 通信协定于2011年被 IETF 定为标准 RFC 6455,WebSocket API 被 W3C 定为标准。
    • 在 WebSocket API 中,浏览器和服务器只需要要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。

    与MQTT的交集

    • 两者之所有有交集,是因为一个应用场景:如何通过HTML5应用来作为MQTT的客户端,以便接受设备消息或者向设备发送信息,那么MQTT over WebSocket自然成了最合理的途径了。

    XMPP

    • 优点:协议开源,可拓展性强,在各个端(包括服务器)有各种语言的实现,开发者接入方便
    • 缺点:缺点也是不少,XML表现力弱、有太多冗余信息、流量大,实际使用时有大量天坑。

    私有协议

    市面上几乎所有主流IM APP都是是使用私有协议,一个被良好设计的私有协议优点非常明显。

    • 优点:高效,节约流量(一般使用二进制协议),安全性高,难以破解;

    • 缺点:在开发初期没有现有样列可以参考,对于设计者的要求比较高。

    APNs

    • 缺点:无法保证消息的及时性。让服务端负载过重,APNs不保证消息的到达率,消息会被折叠
    • 如果面向的目标用户对消息的及时性并不敏感,可以采用这种方案

    建议

    • 如果团队小,团队技术在 IM 上积累不够可以考虑使用 XMPP 或者 MQTT+HTTP 短连接的实现。
    • 大团队可以考虑自己设计和实现私有协议,这里建议团队有计划地迁移到私有协议上。

    相关文章

      网友评论

          本文标题:iOS 消息推送方案对比

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