Asp.net 彗星的例子。我不知道';我不明白

Asp.net 彗星的例子。我不知道';我不明白,asp.net,comet,Asp.net,Comet,执行Response.Flush()时,新网页将发送到客户端 while块将在服务器上永远运行 当新数据到达客户端时,会刷新新数据 怎么可能在同一个地方继续下去呢。是否应该创建新的页面对象?您所描述的内容存在一些问题 1) 您已经描述了客户端和服务器代码不匹配的情况。那里的服务器代码只处理一个永远挂起的AJAX请求,并在客户端收到通知,但不启动新请求。然而,在您的评论中,您描述了一个启动新请求的客户端。这两个概念不能一起工作 2) 详细说明第1点,请求永不结束意味着大多数浏览器将永远看不到它。“

执行Response.Flush()时,新网页将发送到客户端 while块将在服务器上永远运行 当新数据到达客户端时,会刷新新数据
怎么可能在同一个地方继续下去呢。是否应该创建新的页面对象?

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

1) 您已经描述了客户端和服务器代码不匹配的情况。那里的服务器代码只处理一个永远挂起的AJAX请求,并在客户端收到通知,但不启动新请求。然而,在您的评论中,您描述了一个启动新请求的客户端。这两个概念不能一起工作

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

3) 即使有效,代理等最终也会终止请求。他们不喜欢永远坐在那里的请求

4) 这是一个阻塞同步请求,它会疯狂地消耗服务器资源。在它灾难性地失败之前,这不会超过线程池的限制

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

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();
}