Javascript 长时间投票:我如何让它平静下来?
我正在一个函数中开发一个简单的聊天实现,该函数有一个ajax调用,调用setTimeout在成功时调用自己。大约每30秒运行一次。这很好,但我希望在收到消息时能得到更及时的通知。我看到了许多使用jQuery代码进行长轮询的示例,这些代码如下所示:Javascript 长时间投票:我如何让它平静下来?,javascript,jquery,ajax,long-polling,Javascript,Jquery,Ajax,Long Polling,我正在一个函数中开发一个简单的聊天实现,该函数有一个ajax调用,调用setTimeout在成功时调用自己。大约每30秒运行一次。这很好,但我希望在收到消息时能得到更及时的通知。我看到了许多使用jQuery代码进行长轮询的示例,这些代码如下所示: function poll() { $.ajax( { data:{"foo":"bar"}, url:"webservice.do", success:function(msg)
function poll()
{
$.ajax(
{
data:{"foo":"bar"},
url:"webservice.do",
success:function(msg)
{
doSomething(msg);
},
complete:poll
});
}
我理解这是如何工作的,但这只会不断重复地立即向服务器发送请求。在我看来,服务器上需要一些逻辑,在某些内容发生更改之前,这些逻辑会一直保持,否则会立即返回响应,即使没有新的报告。这纯粹是用javascript处理的,还是我遗漏了一些需要在服务器端实现的东西?如果在服务器上处理,暂停服务器执行真的是个好主意吗?根据您的经验,有什么更好的方法来处理这个问题?我的setTimeout()方法是否足够,也许只需要一个较小的超时
我知道WebSocket,但由于它们还没有得到广泛的支持,我想继续使用当前的gen技术。不要暂停服务器的执行。。。如果很多人试图聊天,就会导致服务器资源枯竭
使用客户端来管理暂停时间,就像您使用
设置超时时一样,但延迟较低您错过了“长轮询”中的长部分。服务器有义务不返回,除非有有趣的事情要说。有关更多讨论,请参阅。您已经确定了一个折衷方案,即开放到web服务器的连接,因此消耗http连接(即响应必须阻止服务器端),而频繁的“有什么新的”请求则消耗带宽。如果您的浏览器基础能够支持WebSocket(大多数“现代”浏览器),则WebSocket可能是一个选项。在javascript端,通过传统的ajax轮询没有适当的方法来处理这一问题,因为如果您希望限制请求的数量,那么一端或另一端总是会有延迟。看看基于nodeJS的解决方案,或者甚至可以看看基于PHP的Ajax推送引擎www.ape-project.org 谢谢各位。我在寻找关于框架不可知的一般概念的良好讨论,你们都提供了一些很好的反馈。在我看来,这只是一个衡量增加的流量是否值得更快响应的问题。在我看来,setTimeout是最好的折衷方案。