【发布时间】:2023-03-31 03:45:02
【问题描述】:
我在服务器上有以下 PHP 脚本,它将等待 10 秒并说Hello:
<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 OR end 事件。
重现问题:
- 将 PHP 脚本放在 Internet 上的某个位置
- 执行节点脚本
- 断开互联网
- 脚本什么都不做
我还发现如果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.
所以我的问题是:有没有办法在发送请求后检查套接字是否关闭/连接是否停止? 提前致谢。
【问题讨论】:
-
要重现,您也可以开始下载文件并拉动以太网电缆。我也有同样的问题。
标签: node.js http request client