Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
node.js流管道的超时处理_Node.js_Error Handling_Stream_Timeout_Pipe - Fatal编程技术网

node.js流管道的超时处理

node.js流管道的超时处理,node.js,error-handling,stream,timeout,pipe,Node.js,Error Handling,Stream,Timeout,Pipe,我正在向一个文件发送HTTPS请求,99.9%的调用都可以正常工作,但偶尔(可能在服务器或网络不可用时)会无限期挂起 这显然会导致我的应用程序停止工作,需要手动重新启动 我有其他的https连接,它们过去偶尔挂起,现在总是使用请求对象上的以下错误代码完成,如节点文档中所建议的: request.on('socket', function(socket) { socket.setTimeout(10000); socket.on('timeout', function() { re

我正在向一个文件发送HTTPS请求,99.9%的调用都可以正常工作,但偶尔(可能在服务器或网络不可用时)会无限期挂起

这显然会导致我的应用程序停止工作,需要手动重新启动

我有其他的https连接,它们过去偶尔挂起,现在总是使用请求对象上的以下错误代码完成,如节点文档中所建议的:

request.on('socket', function(socket) {
    socket.setTimeout(10000);
    socket.on('timeout', function() { request.abort(); });
});

request.on('error', function(e) {
   // Handle the error...
   console.error("FAILED!");
});
。。。但是,如果目标通过管道传输到文件流,则请求超时似乎会被忽略,也许我应该处理文件系统对象超时的错误,但文档不清楚是否存在除“完成”之外必须等待的事件

以下是示例代码,希望有人能帮助我:

var https = require('https'),
    fs = require('fs');

var opts = {
        host: 'www.google.com',
        path: '/',
        method: 'GET',
        port: 443
};

var file = fs.createWriteStream('test.html');

var request = https.request(opts, function(response) {
    response.pipe(file);
    file.on('finish', function() {
        file.close(function(){
            console.log("OK!");
        });
    });
 });

request.on('socket', function(socket) {
    socket.setTimeout(10000);
    socket.on('timeout', function() { request.abort(); });
});

request.on('error', function(e) {
  console.error("FAILED!");
});

request.end();

如果您想尝试挂起,用一个大文件更改主机和路径,并在传输过程中断开网线,它应该在10秒后超时,但它不会…

我设置了一个demo node.js http服务器,它发送一个非常慢的响应,并提供一个类似于示例代码的客户端

当我启动客户端,然后在发送响应时停止服务器时,套接字上也不会出现
超时
事件,但客户端内的响应会出现
结束
事件:

var request = https.request(opts, function(response) {
    response.pipe(file);
    file.on('finish', function() {
        file.close(function(){
           console.log("OK!");
        });
    });
    response.on('end', function() {
       // this is printed when I stop the server
       console.log("response ended");
    });
 });
```


也许你可以听听那个事件?

问题是,当tansfer结束时,也会发出“end”,不仅是在它被中断或超时时,我还需要一种方法来检测错误。