javascript - 长轮询: How do I calm it down?

标签 javascript jquery ajax long-polling

我正在一个函数中开发一个简单的聊天实现,该函数具有 ajax 调用,该调用调用 setTimeout 以在成功时调用自身。该命令每 30 秒左右运行一次。这工作正常,但我希望在收到消息时能立即收到通知。我看到很多使用 jQuery 代码进行长轮询的示例,如下所示:

function poll()
{
    $.ajax(
    {
        data:{"foo":"bar"},
        url:"webservice.do",
        success:function(msg)
        {
           doSomething(msg);
        },
        complete:poll
    });
}

我明白这是如何工作的,但这只会立即重复向服务器发送请求。在我看来,服务器上需要有一些逻辑来推迟直到某些事情发生变化,否则即使没有任何新的报告要报告,也会立即发回响应。这是纯粹用 javascript 处理的还是我缺少一些在服务器端实现的东西?如果在服务器上处理,暂停服务器执行真的是一个好主意吗?根据您的所有经验,处理此问题的更好方法是什么?我的 setTimeout() 方法是否足够,也许只是更小的超时?

我了解 websockets,但由于它们尚未得到广泛支持,我想坚持使用当前的技术。

最佳答案

不要暂停服务器执行...如果很多人尝试聊天,将会导致服务器资源枯竭...

使用客户端来管理暂停时间,就像使用 setTimeout 一样,但延迟较低

关于javascript - 长轮询: How do I calm it down?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18454879/

相关文章:

javascript - 如何从 javascript 中的 for-each 循环返回每个值

javascript - 未使用 jquery 中的单击功能设置属性引用

.net - JQuery Ajax 表单提交

javascript - jQuery/JavaScript : Trigger when preloaded

javascript - 创 build 计文档后如何构建cloudant索引?

jquery - ExCanvas 无法在 IE7 和 IE8 IFrame 中工作

javascript - 在 jquery ajax 中既没有成功也没有错误

php - "load more"按钮没有正确排序结果

javascript - 单击时不呈现模态表单

Javascript 数字获取另一个值