彗星的例子。我不明白

时间:2011-04-29 12:16:15

标签: asp.net comet

protected void Page_Load(object sender, EventArgs e)
{
    Response.Buffer = false;

    while (true)
    {
        Response.Write(Delimiter + DateTime.Now.ToString("HH:mm:ss.FFF"));
        Response.Flush();

        // Suspend the thread for 1/2 a second
        System.Threading.Thread.Sleep(500);
    }

    // Yes I know we'll never get here, it's just hard not to include it!
    Response.End();
}

执行Response.Flush()时,新网页将发送到客户端 while块将永远在服务器上运行 当新的maeeage到达客户端时,会刷新新数据 如何继续这个地方是可行的。是不是应该创建一个新的Page对象?

1 个答案:

答案 0 :(得分:1)

您所描述的内容存在一些问题......

1)您已经描述了错误匹配的客户端和服务器代码。那里的服务器代码仅适用于永久挂起的单个AJAX请求,并在客户端上得到通知,但不会启动新请求。但是,在您的评论中,您已经描述了确实启动新请求的客户。这两个概念不会合作。

2)在第1点阐述,请求永无止境意味着大多数浏览器永远不会看到它。 “典型的”AJAX请求在整个内容到达之前不会改变状态,因此请求将永远挂起。您必须结束请求,或使用更改状态的XHR请求,因为每个块都是从服务器刷新的,这在某些浏览器中是可行的。

3)即使1)工作,代理等,最终也会终止请求。他们不喜欢永远坐着的请求。

4)这是一个阻塞同步请求,会像疯了一样吃掉服务器资源。在灾难性失败之前,这不会超出线程池限制。

所以,你在这里给出的例子没有意义:)。