【发布时间】:2013-08-26 23:53:38
【问题描述】:
我正在一个函数中实现一个简单的聊天实现,该函数有一个 ajax 调用,该调用调用 setTimeout 以在成功时调用自身。这每 30 秒左右运行一次。这很好用,但我希望在收到消息时得到更直接的通知。我看到很多使用 jQuery 代码进行长轮询的示例,看起来像这样:
function poll()
{
$.ajax(
{
data:{"foo":"bar"},
url:"webservice.do",
success:function(msg)
{
doSomething(msg);
},
complete:poll
});
}
我了解它的工作原理,但这只会立即重复向服务器发送请求。在我看来,服务器上需要一些逻辑,直到某些事情发生变化,否则即使没有新的报告,也会立即发回响应。这是纯粹用javascript处理的还是我错过了要在服务器端实现的东西?如果它是在服务器上处理的,那么暂停服务器执行真的是个好主意吗?根据您的所有经验,有什么更好的方法来处理这个问题?我的 setTimeout() 方法是否足够,也许只是更小的超时?
我了解 websocket,但由于它们尚未得到广泛支持,我想坚持使用当前技术。
【问题讨论】:
-
谢谢大家。我一直在寻找与框架无关的一般概念的良好讨论,你们都提供了一些很好的反馈。在我看来,这只是衡量增加的流量是否值得更快响应的问题。就我而言,看起来 setTimeout 是最好的折衷方案。
标签: javascript jquery ajax long-polling