firefox Streaming AJAX实现源代码
Streaming AJAX即所谓的服务器推技术使用ajax来实现,AJAX 实现“服务器推”与传统的 AJAX 应用不同之处在于:
- 服务器端会阻塞请求直到有数据传递或超时才返回。
- 客户端 JavaScript 响应处理函数会在处理完服务器返回的信息后,再次发出请求,重新建立连接。
- 当客户端处理接收的数据、重新建立连接时,服务器端可能有新的数据到达;这些信息会被服务器端保存直到客户端重新建立连接,客户端会一次把当前服务器端所有的信息取回。
Mozilla Firefox 提供了对 Streaming AJAX 的支持, 即 readystate 为 3 时(数据仍在传输中),客户端可以读取数据,从而无须关闭连接,就能读取处理服务器端返回的信息。IE 在 readystate 为 3 时,不能读取服务器返回的数据,目前 IE 不支持基于 Streaming AJAX。
下面是firefox下Streaming AJAX实现源代码,服务器端采用的是asp.net。
test.html
<div id="dvTime"></div> <div id="dvRst"></div> <script> var i = 1; window.onload = function () { timer = setInterval(function () { document.getElementById('dvTime').innerHTML = '已经运行了' + i + 's'; i++; }, 1000); var dv = document.getElementById('dvRst'), xhr = new XMLHttpRequest(); xhr.onreadystatechange = function () { dvRst.innerHTML += "AJAX.readyState:" + xhr.readyState + "<br/>"; if (xhr.readyState == 3) dvRst.innerHTML += xhr.responseText + '<br/>'; if (xhr.readyState == 4) clearInterval(timer); } xhr.open("get", "StreamingAJAX.ashx", true); xhr.send(null); } </script>
StreamingAJAX.ashx
<%@ WebHandler Language="C#" Class="StreamingAJAX" %> using System; using System.Web; public class StreamingAJAX : IHttpHandler, System.Web.SessionState.IRequiresSessionState { public void ProcessRequest(HttpContext context) { DateTime t = DateTime.Now; //context.Response.Buffer = false;//禁用缓冲 while (true) { if (DateTime.Now.Subtract(t).TotalSeconds > 60) break;//示例用的,超过60s后结束线程,要长连接注释掉这句 context.Response.Write(DateTime.Now+"<br/>"); context.Response.Flush();//注意要Flush立刻输出,要不会等到缓冲区满了以后才会输出,或者启用最上面那句禁用缓冲 System.Threading.Thread.CurrentThread.Join(10000);//挂起10s } } public bool IsReusable { get { return false; } } }
加支付宝好友偷能量挖...
原创文章,转载请注明出处:firefox Streaming AJAX实现源代码