後停止我的服務器上,將等待10秒鐘,說Hello
以下PHP腳本:節點http.request,沒有活動事件的觸發,如果互聯網發送請求
<php sleep(10); ?>Hello
在客戶端(節點),我有以下幾點:
var http = require('http');
http.get ('http://example.com/sleep.php', function (resp) {
resp.on('data', function (d) {
console.log ('data!', d.toString());
});
resp.on('end', function (d) {
console.log ('Finished!');
});
}).on('error', function (e) {
console.log ('error:', e);
});
的問題是,如果要求在互聯網連接停止,也不會觸發error
或end
事件。
要重新產生問題:
- 某處的PHP腳本互聯網
- 上運行節點腳本
- 斷開互聯網
- 腳本不執行任何
我也發現如果連接在10秒內回來,它仍然可以收到消息。
所以,我做了一個簡單的間隔循環來檢查狀態。但是,如果連接已停止工作或仍在等待響應它無法檢測:
var http = require('http');
var lastRespond = 0, intervalCheck;
var respFinished = false;
http.get ('http://jixun.no-ip.org/sleep.php', function (resp) {
resp.on('data', function (d) {
lastRespond = new Date;
console.log ('data!', d.toString());
});
resp.on('end', function (d) {
respFinished = true;
console.log ('Finished!');
});
}).on('error', function (e) {
console.log ('error:', e);
});
intervalCheck = setInterval(function() {
if (respFinished) {
clearInterval(intervalCheck);
} else if (new Date - lastRespond >= 120000) {
console.log ('Timeout :(');
clearInterval(intervalCheck);
}
}, 120000); // 2 mins.
所以我的問題是:有沒有什麼辦法來檢查插座關閉/連接發送的請求後停止? 在此先感謝。
要重現,您還可以開始下載文件並拉動以太網電纜。我有同樣的問題。 – DrakaSAN