0

Comet 编程几乎为任何 Web 开发人员所熟知,而 jQuery 是目前市场上最流行的 JavaScript 库。正确的?

现在,假设服务器上有一个服务每秒向客户端推送数据。基于 C# 语言的服务器代码的 ASP.NET 实现可能是这样的:

while (true)
{
    Response.Write("{data: 'data from server'}");
    Response.Flush();
    Thread.Sleep(1000);
}

还想象一下,在页面加载到浏览器后,一个 jQuery 片段触发与服务器的保持活动 HTTP ajax 连接,服务器在服务器上将这些数据片段发送回客户端。

到这里为止根本不是问题,因为儿童开发人员也可以做到。然而,jQuery AJAX 有许多在不同场合触发的回调函数。success, error, complete, 等等。但是这些方法都不会在从服务器发送的每个 JSON 上被触发。我的意思是,这段代码不起作用:

$(function () {
    $.ajax({
        type: 'GET',
        url: 'url-of-that-service',
        dataType: 'json',
        success: function (result) {
            /*
            Here, I need to get the result sent by 
            the Server, and based on its data, 
            manipulate DOM. For example, imagine
            that server sends its current time
            in JSON format each second. I need
            to parse the sent JSON string, and 
            append the server time somewhere in
            the web page.
            Success function never gets fired for
            these server-pushed data.
            What should I do?
            */
        },
        error: function (error) { }
    });
});

在 jQuery 中获得最新更新通知的一种方法是轮询responseText底层xhr对象,并定期检查服务器发送的最新数据。但是,我正在寻找一种基于事件的方法来挂钩活动的 ajax 连接,并在服务器发送某些内容时得到通知。

我的问题是,我应该如何检测到某些东西已经从服务器到达?有没有不包括setTimeoutor的简洁方法setInterval?jQuery 在这里有什么可以帮助我们的吗?

4

2 回答 2

0

例如,sendCometRequest您有发送 ajax 请求的功能。您可以使用递归而不是在您从服务器进行响应后再次setInterval调用的成功回调。sendCometRequest它调用为长轮询方法。对于 C#,您可以阅读这篇文章。它解释了异步彗星服务器的好方法。

于 2012-05-05T10:04:48.023 回答
0

嗯,你的问题很多事情都不清楚..

但是如果你正在寻找彗星......我认为你应该寻找一个可靠和实用的彗星实现,并避免做一个 [thread.sleep()+ 连续轮询] 类型的黑客,因为它不会同时出售给许多人用户。

对于 .net,你有 - lightstreamer - http://www.lightstreamer.com/

并且,请确保您确实需要 comet,否则请尝试使用 web-sockets。

于 2012-05-05T10:16:38.017 回答