Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.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_Http_Express - Fatal编程技术网

Node.js服务器即使在客户端断开连接后仍保持流式数据

Node.js服务器即使在客户端断开连接后仍保持流式数据,node.js,http,express,Node.js,Http,Express,我有一个小型Node.js+express服务器,它有一个虚拟下载方法: app.get("/download",function(req,res) { res.set('Content-Type', 'application/octet-stream'); res.set('Content-Length', 1000000000011); res.set('Connection', 'keep-alive'); res.set('Content-Disposi

我有一个小型Node.js+express服务器,它有一个虚拟下载方法:

app.get("/download",function(req,res) {

    res.set('Content-Type', 'application/octet-stream');
    res.set('Content-Length', 1000000000011);
    res.set('Connection', 'keep-alive');
    res.set('Content-Disposition', 'attachment; filename="file.zip"');

    var interval = setInterval(function(){
        res.write(00000000);
        var dateStr = new Date().toISOString();
        console.log(dateStr + " writing bits...");
    },500);
});
问题是,在关闭浏览器后,我仍然可以看到节点服务器正在传输数据。 如何检测客户端何时断开连接并停止流式传输

我尝试使用:

req.on("close", function() {
    console.log("client closed");
});

req.on('error', function(e) {
  console.log('problem with request: ' + e.message);
});

但是没有运气。任何帮助都将不胜感激。

浏览器关闭时不会向服务器发送http请求,并且我在Node.js文档中找不到任何关于请求对象上关闭事件的信息。但是,我已经使用Socket.io设置了类似的设置。此示例每秒向客户端推送一个随机数,并在客户端断开连接后停止推送数据:

io.on('connection', function(socket) {
  var intervalID = setInterval(function () {
    socket.emit('push', {randomNumber: Math.random()});
  }, 1000);
  socket.on('disconnect', function () {
    clearInterval(intervalID);
  });
}
以下是您的操作。

挂起关闭事件对我来说很有效,所以浏览器可能没有真正关闭连接?