“Real-Time Web”应该算一个新的流行词,我不知道应该如何翻译,“实时网络”,虽然已有这样的称呼,好像不太贴切,并且和已有的实时网络概念有些混淆。所以暂时还是保持它原来的样子吧。
一、Real-Time web的定义
在维基百科(Real-time web)上是这样定义的:
“The real-time web is a set of technologies and practices which enable users to receive information as soon as it is published by its authors, rather than requiring that they or their software check a source periodically for updates.”
这里把Real-Time web定义为一个技术和实践的集合;它与传统web的不同点在于可以让用户更及时地获取“作者”的更新。
在此之前,比较类似的技术应该是RSS。RSS Reader会定时从用户订阅的地址上抓取内容,并不是太及时。
二、Real-Time web的代表
Real-Time web的典型代表主要有Twitter、Facebook和Google。
当在Twitter进行搜索时,我们可以看到结果会持续不断的更新。有人做过测试,从发布到结果出现几乎是同时的。而Facebook的friend feeds更新也提供了同样的用户体验。
提到互联网的先进技术,就不能不说Google。Google虽然没有赶上Twitter和Facebook的早班车,但是在2009年12月份宣布将实时搜索(Real-time search)引入到Google搜索中。
在我看来对于同一网站的实现Real-Time web的体验并不困难(也许这句话会招来口水),毕竟数据都在自己的控制中。但是对于Google来讲如果能够从这么庞杂的网络中实时抓取信息,并且作为搜索结果准确地返回给用户,的确应该是一个不小的挑战。
三、实现Real-Time web的技术
作为一个程序员,当看到一个新东西时,最先关注的可能还是如何去做,也就是背后的技术。
1、传统的Ajax Pull
Ajax为页面的局部刷新提供了可能,因此最容易想到的就是Ajax Pull技术了。大概的实现是每隔一段时间使用Ajax进行一次请求,页面上的JavaScript根据返回的结果进行相应的处理。
2、Comet
Comet的实现方法主要有隐藏Iframe技术和Long Polling。隐藏IFrame技术是指利用一个一直打开的不可见的IFrame维持一个和服务器间的持续链接,从而获得较快更新页面的体验。Long Polling技术是一种把页面定时请求和服务器端Push相结合的技术。页面上的Ajax启动一个请求,服务器收到该请求后,并不会立即响应,而是等待一段时间。在这段时间内容,如果服务器有内容更新就会向客户端返回更新的内容;如果没有更新,就会返回超时响应。
3、 服务器端的Push技术
这应该是一种最理想的技术。页面一次请求后,只需等待服务器不断的返回更新的内容。HTTP1.1已经支持客户端和服务器之间的长连接,而HTML5.0的Web Socket也已经在考虑实现。
4、PubSub
这是一种广播订阅机制。相对于频繁的客户端请求,作者不断的向订阅者发布更新的内容会有更好的用户体验。前不久Google发布一个PubSubHubHub的项目,支持Real-Time Web的广播订阅机制。 如今已经有MySpace、Facebook、Google Reader等在使用PubSubHubHub。
Real-Time Web正慢慢地变为除IM、Email以外另外一种通信方式,并且用户群正在不断的扩大。而这里,我也是说的杂乱无章,感觉很多东西要说,却不知从何说起,欢迎大家拍砖讨论!
参考文章: