firefox Streaming AJAX实现源代码

  Streaming AJAX即所谓的服务器推技术使用ajax来实现,AJAX 实现“服务器推”与传统的 AJAX 应用不同之处在于:

  1. 服务器端会阻塞请求直到有数据传递或超时才返回。
  2. 客户端 JavaScript 响应处理函数会在处理完服务器返回的信息后,再次发出请求,重新建立连接。
  3. 当客户端处理接收的数据、重新建立连接时,服务器端可能有新的数据到达;这些信息会被服务器端保存直到客户端重新建立连接,客户端会一次把当前服务器端所有的信息取回。

  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实现源代码

评论(0)Web开发网
阅读(262)喜欢(1)JavaScript/Ajax开发技巧