硬核干货——《中小企业 AI 实战指南》免费下载! 了解详情
写点什么

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

  • 2013-06-14
  • 本文字数:1318 字

    阅读完需:约 4 分钟

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

2013-06-14 07:323660
用户头像
臧秀涛 略懂技术的运营同学。

发布了 300 篇内容, 共 148.1 次阅读, 收获喜欢 35 次。

关注

评论

发布
暂无评论
发现更多内容

Linux操作系统——定时任务调度、磁盘分区与挂载、网络配置

胖虎不秃头

Linux 操作系统 10月月更

【一Go到底】第二天---你好,Go and GOROOT&GOPATH

指剑

golang Go入门 10月月更

如何在 Linux 中删除超过 30 天的文件

wljslmz

Linux 10月月更

react的jsx和React.createElement是什么关系?面试常问

beifeng1996

React

Collections之 Arraylist源码解读(二)

知识浅谈

ArrayList 10月月更

能否手写vue3响应式原理-面试进阶

helloworld1024fd

JavaScript

Linux操作系统——用户管理、实用指令

胖虎不秃头

Linux 10月月更

2022-10-02:以下go语言代码能否通过编译?A: 能;B: 不能;C: 不知道。 package main import ( “fmt“ ) type worker interfa

福大大架构师每日一题

golang 福大大 选择题

写过自定义指令吗,原理是什么?

bb_xiaxia1998

Vue

大数据ELK(十一):Elasticsearch架构原理

Lansonli

elasticsearch 10月月更

JS继承有哪些,你能否手写其中一两种呢?

helloworld1024fd

JavaScript

Python基础(七) | 文件、异常以及模块详解

timerring

异常 Python Monad 10月月更

使用 RxJs 实现一个支持 infinite scroll 的 Angular Component

汪子熙

前端开发 angular RXJS web开发 10月月更

MyBatis 学习笔记之配置文件

薛定谔的猫

mybatis 10月月更 mybatis配置文件

Vue3入门指北(六)列表渲染

Augus

Vue3 10月月更

怎样对react,hooks进行性能优化?

beifeng1996

React

Linux操作系统——日志管理

胖虎不秃头

Linux 操作系统 10月月更

【SSM】Spring系列——IoC 控制反转

胖虎不秃头

spring ssm 10月月更

SAP 电商云 Spartacus UI 的响应式 UI 实现细节

汪子熙

前端 前端开发 web开发 10月月更 breakpoint

【LeetCode】检查二进制字符串字段Java题解

Albert

LeetCode 10月月更

Docker下,两分钟极速体验Nacos

程序员欣宸

Docker Spring Cloud 10月月更

Linux操作系统——进程管理、RPM与YUM

胖虎不秃头

操作系统 Linux tar 10月月更

【从0到1学算法】2.递归

Geek_65222d

10月月更

用30分钟相中10倍工程师

愚夫一得

面试 技术管理 招聘 文化 & 方法

业务实时监控服务

穿过生命散发芬芳

10月月更 业务监控

js事件循环与macro&micro任务队列-前端面试进阶

loveX001

JavaScript

什么是虚拟服务器?一共有多少种虚拟服务器?这篇文章带你扫盲!

wljslmz

10月月更 虚拟服务器

MyBatis 学习笔记之MyBatis入门开发

薛定谔的猫

mybatis 10月月更 mybatis入门

Linux操作系统——组管理和权限管理

胖虎不秃头

Linux 操作系统 10月月更

Python应用之计算阶乘

芯动大师

函数 10月月更 阶乘计算

面试官:vue2和vue3的区别有哪些?

bb_xiaxia1998

Vue

后HTTP时代:使用Meteor开发实时Web应用_JavaScript_Zef Hemel_InfoQ精选文章