我正在一个函数中开发一个简单的聊天实现,该函数具有 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/