使用ajax和webapi进行长时间轮询时的瘦身是什么……它会杀死我的服务器吗?和字符串比较

我有一个非常简单的长轮询ajax调用,如下所示:
(function poll(){
    $.ajax({ url: "myserver",success: function(data){
        //do my stuff here

    },dataType: "json",complete: poll,timeout: 30000 });
})();

我刚刚今天下午选了这个例子,看起来效果很好.我正在使用它在我的页面上构建一些html,它几乎是瞬间我尽力而为.我有点担心,这会让我的服务器上的工作线程保持打开状态,如果我在服务器上有太大的负载,它就会完全停止.有人能否对这一理论有所了解?在后端我有一个webapi服务(.net mvc 4),它调用数据库,构建对象,然后将对象传回.在我看来,为了使这个工作,服务器将不得不不断地调用数据库…这可能是不对的???

我的下一个问题是客户端确定是否需要更新页面上的html的最佳方法是什么?目前我正在使用JSON.stringify()将我的对象转换为字符串并比较字符串和旧字符串,如果有一个delta,它会在页面上重写html.现在不是一个整体在对象下降很多,但它可能会变得非常大,我认为进行字符串比较可能在客户端上非常耗费资源……特别是如果它几乎不断地进行.

对我来说,底线是这样的:我不确定轮询的工作时间有多长.我只是用Google搜索并找到了上面的示例代码并实现了它,从表面上看,它很棒.我只是担心它会让事情变得糟糕down(在服务器上)和我将旧结果与new进行比较的方式会降低(在客户端上).

我们非常感谢您提供的任何和所有信息.

TIA.

我同意SLaks – 即如果你需要使用WebApi http://www.asp.net/signalr的实时网络,则使用SignalR.长轮询难以很好地实现,让其他人处理这种复杂性,即使用SignalR(WebApi的自然选择)或Comet.

在使用长轮询,Web套接字,服务器发送事件和永久帧(here)之前,SignalR尝试其他3种形式的通信.

在某些情况下,您可能更适合使用简单的轮询,即每秒钟左右更新一次……请查看this文章.但这是一个引用:

when you have a high message volume,long-polling does not provide any substantial
performance improvements over Traditional polling. In fact,it Could be worse,
because the long-polling might spin out of control into an
unthrottled,continuous loop of immediate polls.

担心的是,如果网页上有任何重大负载,您的30秒ajax查询最终可能会成为您自己的拒绝服务攻击.

如果负载过多,即使Bayeux(CometD)也会采用简单的轮询:

Increased server load and resource starvation are addressed by using
the reconnect and interval advice fields to throttle clients,which in
the worst-case degenerate to Traditional polling behavIoUr.

至于你问的第二部分.

如果您使用长轮询,那么理想情况下您的服务器应该只返回更新,如果实际上已经发生了某些变化,那么您的UI应该“信任”响应并假设响应意味着新数据.任何服务器推送类型方法都是如此.

如果您确实向下移向简单的轮询pullmethod,那么您可以使用内置的http方法来检测更新,使用If-Modified-Since标头,这将允许您返回304 Not Modified,因此服务器将检查时间戳object,如果自上次请求后已经修改了对象,则仅返回200.

相关文章

IE6是一个非常老旧的网页浏览器,虽然现在很少人再使用它,但...
PHP中的count()函数是用来计算数组或容器中元素的个数。这个...
使用 AJAX(Asynchronous JavaScript and XML)技术可以在不...
Ajax(Asynchronous JavaScript and XML)是一种用于改进网页...
本文将介绍如何通过AJAX下载Excel文件流。通过AJAX,我们可以...
Ajax是一种用于客户端和服务器之间的异步通信技术。通过Ajax...