V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wilddog
V2EX  ›  分享发现

如何 10 分钟让 APP 实现实时互动?

  •  
  •   wilddog · 2016-04-25 10:45:16 +08:00 · 2275 次点击
    这是一个创建于 3136 天前的主题,其中的信息可能已经有所发展或是发生改变。

    实时.jpeg

    实时应用的开发特别复杂。而为了帮助开发者解决这个问题,今天我们就来讨论下野狗实时后端云是如何助力 APP 实现实时的。

    通信架构

    我们先看一下 app 与 server 端进行通信的架构:

    博客更新李贝 1.png

    目前绝大多数应用都是这样, app 通过 http 请求与 server 端进行通信。这是一种基于请求 /响应的模型,只有 app 端能够主动发起请求, server 只对请求进行处理并发送响应。在 app 端没有发送请求的时候, server 端是无法主动向 app 端进行通信的。

    这种模式可以很好的解决 app 中大部分的非实时场景的需求。在此基础之上,实时的部分应如何实现呢?

    实现实时

    目前主流的技术上有 3 种方案(忽略了基于 flash 等其他方式):

    • Http polling
    • Http Long-polling
    • Socket 长连接

    Http polling也就是轮询的策略,它唯一的优点就是实现简单,技术门槛低。但是缺点也很明显:不够实时,且效率低下,导致 server 端负载较高。

    Http Long-polling(长轮询,也称作 comet )技术,是在 Http polling 基础上优化而来。在长轮询策略下,当 server 端没有数据推送到 client 端时,请求不会立即返回,而是被 server 端 hold 住,直到有数据发送,或者超时,才发送响应。 Client 端收到响应之后,立即重新发起 http 请求。

    这种策略比简单的轮询优化了许多,但开发和维护成本也提高了许多。并且,效率还不够高,存在资源的浪费。而这主要是因为 http 协议头本身带来的 overhead 。

    Socket 长连接是目前认为优点最多的解决方案。这一方案的原理是 client 端向 server 端建立一个 TCP 长连接,通过心跳的机制维护连接畅通,当有数据需要交互时,双方都可以通过这个长连接进行通信。

    多年前这种方案无法应用在浏览器端,然而随着 html5 的兴起和浏览器的发展,目前主流的浏览器都已经支持 websocket 了,可以很好的实现长连接。

    Socket 长连接是最理想的方案,但开发成本也相应的最高。服务端需要支持大量的连接数,且长连接本身的特性也决定了服务不再是无状态的,这给服务的稳定性和可扩展性带来了一定的挑战。

    使用野狗的优势

    野狗的实时后端云服务则使开发者无需重复解决同一个问题。可以这样认为,野狗提供了一个双向实时通信的通道,架构示意图如下:

    博客更新李贝 2.png

    图中,蓝色为应用原有的部分,橙色为野狗提供的实时通道。 app 端可以是浏览器,也可以是移动端 Android/iOS 。

    当一个 app 要增加实时交互的场景时,使用野狗,就无需开发服务端和客户端了,只需要在 app 端集成野狗的 SDK ,并通过简单的 API 调用,就在 app 和野狗云端建立了一个 websocket 长连接。

    同样的通过 SDK 中的 API ,可以实现对指定数据的关注,并绑定一个回调函数或方法。在被关注的数据发生改变的时候,回调函数就会被触发,只需要在回调函数中处理变化的数据就可以了。

    数据的变化可以由某个终端用户的 app 端通过长连接写入野狗(常见于两个终端用户之间的实时交互),也可以是经由 app 的服务端通过 Rest API 的方式写入野狗云(适用于 app 的 server 端发起的实时数据变化)。

    存储与安全

    当数据写入野狗云后,需要考虑两个问题:

    如果 app 处于离线状态,再上线时如何收到之前的数据? 数据的安全性是如何保障的? 存储方面。野狗云端会对通信的数据进行存储, App 端可以通过 SDK 对数据进行简单的查询。当有实时数据需要发送给某个 app 时,如果 app 不在线,那么会在下次接入网络时进行数据的查询,获取到之前传输过来的数据,并且同时进行关注数据今后的变化。这样就解决了 app 暂时离线的问题。

    安全方面。野狗提供了一套基于 javascript 语法的规则表达式,它可以很好的和 app 的终端用户账户系统集成,实现读写访问权限的控制。由于野狗云端也会对数据进行存储,因此也可以将野狗看作是一个云端数据库。

    数据的实时同步是这个云端数据库的一个特性,实时通信的过程相当于 SDK 本地数据子集副本和云端数据库之间的同步。实时通信通道的安全性也是基于云端数据库读写访问权限控制的。

    由于篇幅的原因,关于云端数据存储的结构和规则表达式的设置在这里就不展开叙述了。只要大家了解到野狗云端可以集成 app 现有的终端用户系统,将数据读写的访问权限控制在很细的粒度,可以设置哪些数据只能被哪些指定的终端用户读或写。

    野狗还有很多其他酷炫的特性。快使用野狗开发实时 app 吧,你专注在业务逻辑上,野狗帮你搞定实时通信的问题。 qrcode_for_gh_55dcc2c31752_258 (2).jpg

    关注野狗官方微信,获取更多技术干货

    3 条回复    2016-04-26 10:22:12 +08:00
    gotounix
        1
    gotounix  
       2016-04-25 11:20:28 +08:00   ❤️ 2
    能别发此类文章么?这也叫分享发现?野狗基本所有文章都一个套路:
    要实现某一需求 → 目前有以下方法: A 、 B 、 C → A 、 B 、 C 的劣势 → 野狗的优势 → 关注野狗 → 结束。
    rppig42
        2
    rppig42  
       2016-04-25 12:52:47 +08:00
    我支持一下,只不过不敢用, Facebook 的 parse 宣布关闭至少会开源代码让用户自己 host ,野狗怎么消除国内用户这方面的顾虑呢?
    wilddog
        3
    wilddog  
    OP
       2016-04-26 10:22:12 +08:00
    @rppig42 野狗跟 parse 不是同一类产品,用野狗 API,可以获得实时后端云的两大功能:
    实时通信,包括消息订阅,推送,双向通信等功能;
    数据存储,提供了一个 Key-Value 的云端数据存储,直接通过 API 就可以对数据进行存取操作。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6057 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 02:49 · PVG 10:49 · LAX 18:49 · JFK 21:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.