Meteor开发平台入门 互动版

分布式数据协议 - DDP

Meteor平台基于websocket,在前端和后端之间建立了一条双向的实时数据通道。Meteor 将前后端之间的通信规约,定义为DDP - Distributed Data Protocol。

如果你开发过基于websocket或socket.io的实时应用,那么很容易理解DDP - 它对实时链路 上的JSON报文格式交互时序进行了规范化

比如,在DDP中定义了两种心跳报文,用于探测链路的状态。发起方(可以是前端,也可以是后端) 发送ping报文,响应方回送pong报文,那么发起方就可以确认对端还活着:

heartbeat

你看到,ping报文和pong报文就是两个具有预定义结构的JSON对象。

DDP的重点在于支持两种远程计算模式:远程过程调用、数据发布/订阅。

≡ 远程过程调用

远程过程调用/RPC - Remote Procedure Call是一种历史相当久远的远程计算模式,它使客户端 调用者可以像调用本地过程一样来调用服务端的远程过程:

ddp-rpc

上图中,客户端利用DDP协议的method报文调用了服务端的calc过程,服务端通过result报文 返回结果。通常的RPC过程到这一步就结束了,而DDP RPC增加了一个updated报文用来通报由这个调 用引起的多点数据更新已经完成。

≡ 数据发布/订阅

数据发布/订阅 - Pub/Sub模型是另一种相当成熟的远程计算模式。客户端向服务端订阅一个主题, 然后,每当服务端的这个主题发生了变化,会主动地向客户端推送变化。当客户端取消了先前的订阅后, 服务端就不再推送关于该主题的变化了:

ddp-pubsub

上图中,客户端利用DDP协议的sub报文订阅了服务端的news主题。服务端将初始的数据通过added 报文发送给客户端后,使用ready报文通知客户端初始数据发送完毕。在随后的某个时刻,服务端添加 /修改/删除的数据,分别通过added/changed/removed报文发送给客户端。