2013-02-13 219 views
1

如何检测客户端期间服务器是否关闭了使用javascript访问过的页面?如何检测服务器是否关机?

具有永久保持活动标头的请求可以做到这一点,但问题在于即使用户离开页面时也会触发。

+3

因为它没有更多?.....为什么会关闭服务器?当然,这是一件罕见的事情,对吧?这就是为什么我们有群集,UPS和冗余驱动器...... – 2013-02-13 11:55:59

+3

你可以做一个ajax请求,看看它是否失败。 – 2013-02-13 11:56:48

+1

http://stackoverflow.com/questions/4282151/is-it-possible-to-ping-a-server-from-javascript – l2aelba 2013-02-13 11:57:55

回答

2

也许这是一种幼稚的方法,但是当ajax调用失败时可以计算响应头的数量。使用jQuery,例如,你可以这样做:

$.ajax({ 
    'url': urlToTheServer, 
    'success': function() 
    { 
     // server is up 
    }, 
    'error': function($xhr) 
    { 
     if($xhr.getAllResponseHeaders().length < 1) 
     { 
      // fair probability server is down 
     } 
    } 
}); 

我测试了这个问题的方法,在我的开发中,是包裹上面的setTimeout()通话(与比方说,一个10秒的超时)。加载页面。关机服务器。然后等待超时过期并执行ajax请求。

PS .: $xhr.getAllResponseHeaders()返回一个换行符分隔的标题字符串,而不是数组或标题对象。起初我忽略了这一点,但是这并没有改变剧本的结果。如果$xhr.getAllResponseHeaders()的字符串长度小于1,则不存在响应标头。

+0

你是说如果服务器出现故障,没有头文件? – Adam 2013-02-13 12:10:35

+0

是的,我刚刚测试了这个关闭我的Apache服务器。它以我期望的方式工作。 – 2013-02-13 12:11:36

+0

如果我在服务器关闭的情况下发送请求,这将起作用。这就是我在我的问题中实际提出的问题。所以我接受你的答案。然而,我只是意识到我真正想要的是检查永久保持活动的ajax请求是否因服务器关闭或用户中止(例如:导航离开)而失败,但我正在提出一个新问题。 – Adam 2013-02-14 20:55:34

相关问题