0
setInterval(function{

 //send ajax request and update chat window


}, 1000)

有没有更好的方法来用新消息更新聊天?这是使用 setInterval 更新聊天的正确方法吗?

4

2 回答 2

3

有两种主要选择(或更多说的流行方式)

首先是拉动,这就是你正在做的事情。每 x (milli) 秒检查一次服务器配置是否已更改。

这是html4方式(不包括flash等,所以只有html/js)。对于 php 而言,这不是最好的方法,因为您为单用户每分钟建立大量连接(在您的示例代码中,每秒至少 60 个连接)。

也建议在响应之前等待,然后等待。例如,如果您每 1 秒请求一次更新,但您的响应需要 2 秒,那么您就是在敲击您的服务器。有关更多信息,请参阅tymeJV 答案

推动

接下来是推。这更像是 HTML5 方式。这是由 websockets 实现的。令人高兴的是客户端正在“列出”连接并等待更新。当它更新时,它会触发一个事件。

这在 PHP 中实现并不好,因为您需要一个持续的连接,并且您的服务器将很快溢出,因为 PHP 无法将连接推送到后台(如果我正确的话,Java 可以)。

我个人制作了一个小型聊天应用程序并使用了pusher。它完美地工作。我只使用免费版本,所以不知道它有多贵。

于 2013-10-02T19:59:06.433 回答
0

几乎是的,一个小的调整,而不是在间隔内封装 AJAX 调用(如果服务器上出现问题,这可能会导致未返回的请求池化),您应该setTimeout在 AJAX 回调中抛出一个以创建递归调用。考虑:

function callAjax() {
    $.ajax(options).done(function() {
        //do your response
        setTimeout(callAjax, 2000);
    });
}

callAjax();
于 2013-10-02T19:53:55.537 回答