实时通信

实时通信是什么?

使用野狗的 SDK,可以使你的应用拥有双向通信的能力。你不仅可以对数据进行增删改查,还可以将云端数据的变化实时同步到客户端。野狗 SDK 使用websocket与云端建立一个长连接,在不支持websocket的环境将降级使用long-polling模拟长连接。使用长连接模式相较于传统的基于请求/响应的短连接模式拥有很多优势:

  • 1.实时性,减少了每次因为建立连接而导致的时延。野狗启用 TLS 保障websocket通道的安全,如果是传统基于 HTTPS (即 HTTP + TLS) 的短连接,那么每次 TLS 的握手过程将造成更大的延迟。即便降级到long-polling的时候,野狗云端也做了很多优化,用于降低 TLS 的延迟,如 session resume、OCSP stapling、AES-NI 等技术。

  • 2.双工通道,不再是基于请求响应的模式,云端也可以主动通过这个长连接通道向客户端推送数据,这也是实时同步数据的基础。

  • 3.节省流量,减少了短连接每次建立连接时握手过程的消耗;减少了 HTTP 的 header,提高了数据传输效率。

基于数据实时同步的模式,可以将数据状态推到所有的终端用户,应用端的开发只需要处理数据的变化就可以了。实时变的很简单,你可以利用它优化很多用户体验。


实时同步是什么?

实时同步是野狗的核心,本节会通过两个例子,让你迅速了解到野狗实时同步的含义与强大之处。首先你需要打开两个浏览器,都进入野狗的控制面板数据预览页面,如下图:

打开两个浏览器

数据预览就是使用野狗的JavaScript SDK实现的,在这里不仅可以浏览数据,还可以对数据进行添加、修改、删除的操作。在两个浏览器中选择一个作为主操作页面,另外一个作为参照页面。在主操作页面上先试试添加一条新数据,点击下图中的绿色“+”号。

如下图,填充好 key-value 的数据,然后点击“确定”按钮,

在另外一个浏览器上,页面会立即有如下图所示的变化。新增数据出现在数据预览中,两边数据保持一致。

当在一个页面操作新增数据后,数据首先在本地添加成功,然后将它发送给云端,云端做持久化。这时由于另一个页面的数据预览使用JavaScript SDK关注了应用的全部数据,相当于将自己注册到云端成为一个订阅者,因此云端会将数据的变化推送过来。


实时同步能做什么?

还是打开两个浏览器,方便观察现象。都打开这个页面 http://drawing.wilddogapp.com/ 。这是一个使用JavaScript SDK实现的画图demo,一个人画的画可以实时同步到其他人的终端。扫一下二维码可以手机参与进来。


本地事件是什么?

配合实时同步还有一个重要的概念:本地事件。当你使用SDK关注了一个数据节点,云端数据发生的变化被同步到 SDK ,此时将触发本地事件。数据的修改,新增等都是不同的事件,你可以针对不同的事件绑定不同的处理过程。可以理解为SDK做了数据的 diff 操作,将两个数据版本的变化以事件的方式输出出来。

R