Ajax:异步的Javascript和XML(Asynchronous JavaScript And XML),一种可通过JavaScript来访问的浏览器功能特性,其允许脚本向后台服务器发送一个HTTP请求而又无需重新加载页面。只需要局部刷新页面即可满足业务开发的技术。
Reverse Ajax:反向ajax,是一种允许服务器端向客户端推送信息的技术。在Ajax请求在缺省情况下是无状态的,且只能从客户端向服务器端发出请求。你可以通过使用技术模拟服务器端和客户端之间的响应式通信来绕过这一限制。
Polling:轮询,涉及了从客户端向服务器端发出请求以获取一些数据,这显然就是一个纯粹的Ajax HTTP请求。为了尽快地获得服务器端事件,轮询的间隔(两次请求相隔的时间)必须尽可能地小。但有很大的缺点存在:如果间隔减小的话,客户端浏览器就会发出更多的请求,这些请求中的许多都不会返回任何有用的数据,而这将会白白地浪费掉带宽和处理资源。
JSONP polling:JSONP 轮询基本上与 HTTP 轮询一样。不同之处在于使用 JSONP 您可以发送跨域请求(请求不属于您所在的域)。
Piggyback polling:捎带轮询,是一种比轮询更加聪明的方式,它会删除掉所有非必需的请求(没有返回数据的那些)。不存在时间间隔,客户端在需要的时候向服务器端发送请求。不同之处在于响应的那部分上,响应被分成两个部分:对请求数据的响应和对服务器事件的响应,如果任何一部分有发生的话。
Comet:是一种用于web的推送技术,能使服务器能实时地将更新的信息传送到客户端,而无须客户端发出请求,目前有两种实现方式:Long polling(长轮询)和Streaming(流)。
Forever Iframes:(永存的 Iframe)技术涉及了一个置于页面中的隐藏 Iframe 标签,该标签的 src
属性指向返回服务器端事件的 servlet 路径。每次在事件到达时,servlet 写入并刷新一个新的 script 标签,该标签内部带有 JavaScript 代码,iframe 的内容被附加上这一 script 标签,标签中的内容就会得到执行。
XHR multipart-replace:是在XMLHttpRequest对象上使用某些浏览器(比如 Firefox)支持的 multi-part 标志。Ajax 请求被发送给服务器端并保持打开状态,每次有事件到来时,一个多部分的响应就会通过这同一连接来写入。该方式主要针对Gecko内核的浏览器。
XHR streaming:是在XMLHttpRequest对象上使用浏览器支持的responseText标志。Ajax 请求被发送给服务器端并保持打开状态,每次有事件到来时,一个多部分的响应就会通过这同一连接来写入。该方式主要针对所有浏览器。
Long polling:长轮询,涉及了打开连接的技术。连接由服务器端保持着打开的状态,只要一有事件发生,响应就会被提交,然后连接关闭。接下来。一个新的长轮询连接就会被正在等待新事件到达的客户端重新打开。
XHR long polling:是一种推荐的实现 Comet 的做法。首先打开一个到服务器端的 Ajax 请求然后等待响应。服务器端需要一些特定的功能来允许请求被挂起,只要一有事件发生,服务器端就会在挂起的请求中送回响应并关闭该请求,完全就像是您关闭了 servlet 响应的输出流。然后客户端就会使用这一响应并打开一个新的到服务器端的长生存期的 Ajax 请求。
WebSockets :在 HTML5 中出现,是比 Comet 更新的反向 Ajax 技术。WebSockets 支持双向、全双工通信信道,而且许多浏览器(Firefox、Google Chrome 和 Safari)也支持它。连接通过 HTTP 请求(也称为 WebSockets 握手)和一些特殊的标头 (header)。连接一直处于激活状态,您可以用 JavaScript 编写和接收数据,正如您使用原始 TCP 套接字(即Socket)一样。
FlashSockets:对于不支持 WebSockets 的浏览器,一些库能够回退到 FlashSockets(通过 Flash 的套接字)。这些库通常提供相同的官方 WebSocket API,但是它们通过将调用委派给网站上包含的隐藏的 Flash 组件来实现。使用该方法首先必须要安装Flash插件,并且确保843端口的正常。
Node.js使用了以上的部分技术(WebSocket、Adobe® Flash® Socket、AJAX long polling、AJAX multipart streaming、Forever Iframe、JSONP Polling),当客户端向node.js服务器请求javascript引用文件时,Node.js自动判断请求服务器的浏览器内核以及版本,寻找最优解决方案,然后生成对应浏览器的专属脚本库文件。方便开发人员只注重API的调用而不用关心底层实现方式。
在IE7、IE8、IE9下测试发现使用的是xhr-polling的http请求方式,向node,js服务器发起ajax请求;IE10下使用的是WebSocket的通信方式;Chrome 32下使用的亦是WebSocket的通信方式。