微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用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.

原文地址:https://www.jb51.cc/ajax/159911.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐