Javascript 长时间投票:我如何让它平静下来?

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)

我正在一个函数中开发一个简单的聊天实现,该函数有一个ajax调用,调用setTimeout在成功时调用自己。大约每30秒运行一次。这很好,但我希望在收到消息时能得到更及时的通知。我看到了许多使用jQuery代码进行长轮询的示例,这些代码如下所示:

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是最好的折衷方案。