【问题标题】:Node.js server keeps streaming data even after client disconnected即使在客户端断开连接后,Node.js 服务器也会保留流数据
【发布时间】:2015-06-12 08:20:41
【问题描述】:

我有一个小型 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);
});

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

【问题讨论】:

  • 挂钩close 事件对我有用,所以浏览器可能没有真的关闭连接?

标签: node.js http express


【解决方案1】:

浏览器在关闭时不会向服务器发送 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);
  });
}

这是set up Socket.io with Express的方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-29
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    • 2012-03-21
    • 2012-05-02
    • 2015-04-04
    • 2011-09-28
    相关资源
    最近更新 更多