后HTTP时代:使用Meteor开发实时Web应用

在QCon New York 2013大会的HTML5专场中,Matt DeBergalis就Meteor做了一场报告。Meteor是开源的实时Web应用框架,Debergalis是该框架的联合创建者。据DeBergalis介绍,从架构上看,选择客户端还是服务器,钟摆已经摇摆了多次:从主机(服务器端)到桌面(客户端),再到Web(服务器端),现在又发展到了现代化的Web——客户端功能越来越强,越来越多的工作又回到了客户端。然而,DeBergalis认为用于构建这些现代化Web应用的工具还没有跟上。Meteor的目标就是提供一种工具,让开发者更轻松、更一致地构建这类实时Web应用。

今天的现代化Web应用由两个不同的部分组成:

  1. 服务器端可能是使用诸如PHP、Java或Ruby等语言构建的,同时使用特定的服务器端API及工具来构建软件并管理依赖。
  2. 客户端会使用一种或多种JavaScript库、HTML和CSS,而且也是利用自己的构建工具(如Google Closure Compiler)来构建的。

两者之间的通信本质上采用的是一种定制的线级协议,通常使用HTTP或WebSocket之上的JSON来编码,并以这种方式发送命令:发送一段数据、将这段新数据持久化及渲染这段数据等。

Meteor反思了这种实现方式,并致力于让一切实时进行。HTTP并不适合这一目标,相反,通过WebSocket使用Meteor自己的DDP(分布式数据协议)进行通信更为合适,而且这里的通信不仅仅是交付Web资源。DDP是一种通用协议(使用JSON编码),支持如下三种核心操作:

  • 订阅:利用该协议,客户端可以登录并发表自己的意见:“我对数据集合X感兴趣,请发给我它的所有数据的初始快照,然后不断地将数据的变化值发给我,以便我更新缓存的数据,使其保持最新。”
  • 发布:“实体Y的X属性,其值修改为Z。”
  • 远程过程调用(RPC):这类操作用于执行远程过程,并以容错的方式返回执行结果。

Meteor提供了一个用JavaScript编写的、支持服务器和客户端的DDP实现(在服务器上是支持Fibers的Node.js)。不过该协议与实现无关,因此可以编写另外的实现作为替代。比如,现在已经有了一个.NET客户端库。

Meteor的第二个组件是其视图引擎,它能利用底层数据自动将DOM保持最新,与AngularJS和Web Components支持的功能类似。

Meteor的第三个组件是打包系统。因为Meteor组件不仅仅是服务器端或客户端,因此当前的打包系统并不合适。Meteor的打包系统可以同时分发服务器端组件和客户端组件。

Meteor本身可以确定哪部分代码需要运行在浏览器中,哪部分运行在服务器上。DeBergalis提到,为了更好地分割代码,目前正在开发静态源码分析技术。有了这样的技术,就可以只推送客户端需要的代码。

实时推送数据,并不是Meteor中唯一涉及实时性的地方。热代码推送是Demo中最引人注目的特性之一是:不管开发者什么时候保存文件,Meteor不仅能自动地重新加载服务器上的代码,还能自动地将代码打包,并将代码推送给所有客户端,确保所有客户端运行的是与服务端代码兼容的、最新最好的客户端代码。

Meteor是一种有趣的全栈式实时Web应用开发方法。要学习更多知识,请阅读Meteor网站提供的文档,并研究相关例子。此外,还有一本关于Meteor的书,InfoQ曾发布过相关书评。

查看英文原文:The Post-HTTP Era: Real-Time Web Apps With Meteor

你可能感兴趣的:(后HTTP时代:使用Meteor开发实时Web应用)