如何指示用户是否在客户端上线

时间:2015-02-07 21:29:04

标签: jquery ajax recursion

我正在开发一个非常类似于在线考试的网站,我想设计一种方式,以便我可以向用户表明他们当前是连接还是与我的服务器断开连接。为此,我不断ping我服务器上的空文件,以了解连接是否可用。代码看起来像这样 -

$(document).ready(function(){
//Defining the function
 var req = function () {
    $.ajax({
        url : 'ping.php',
        error: function(){$("#circle").css("background","red");},
        complete : function () {
            $("#circle").css("background","green");
            req();
        }
    });
};

//Calling the function
req();

//Rest of my code

});

现在我的理解是,只要调用完成,圆圈就会变为绿色,如果发生错误,它将变为红色,并且Ajax调用将停止。我的问题如下:

  1. 有没有“更好”的方法呢?例如,Google或Facebook如何标记其在线用户?

  2. 这种递归式Ajax Call会以任何方式降低/减慢我的服务器吗?

  3. 注意:它实际上不是“我的”服务器。我没有行政权利,因此这是一个主要问题。

    请帮帮我。谢谢!

1 个答案:

答案 0 :(得分:0)

1)你应该用超时限制你的ping。这将减少服务器的负载。这可以使用setTimeout完成。

2)您应该只将圆圈设置为绿色。完成了成功和错误的激活,因此您将始终在代码中看到绿色。

$(document).ready(function(){
//Defining the function
 var req = function () {
    $.ajax({
        url : 'ping.php',
        success : function(){$("#circle").css("background","green");},
        error: function(){$("#circle").css("background","red");},
        complete : function () {
            setTimeout(req, 5000);
        }
    });
};

//Calling the function
req();

//Rest of my code

});

作为一个额外的琐事,您的代码在技术上不是递归的,因为后续调用发生在事件循环的下一个事件中。也就是说先前调用req实际上是在下一次调用req()之前返回的。如果这是传统的递归调用,您将不会无休止地使用代码将调用放在堆栈上。