使用Node.js请求模块进行管道时,关闭事件不起作用?

时间:2015-06-22 15:50:39

标签: node.js express server-sent-events node-request

我目前正在为我的聊天应用开发两个Node.js应用程序:第一个是处理后端逻辑的API,另一个是使用API​​的客户端(使用Angular.JS的前端)。

客户端应用正在使用请求模块代理对API的HTTP请求,因为在我找到这篇文章之前,我无法让他们相互通信:https://blog.javascripting.com/2015/01/17/dont-hassle-with-cors/

API(订阅事件流):

var clientId = 0;
var clients = {};

app.get('/api/xyz', function(req, res) {

    console.log('start');

    req.socket.setTimeout(0x7FFFFFFF);

    res.writeHead(200, {
        'Content-Type': 'text/event-stream',
        'Cache-Control': 'no-cache',
        'Connection': 'keep-alive'
    });
    res.write('\n');

    (function(clientId) {
        clients[clientId] = res;

        req.on('close', function() {
            console.log('close');
            delete clients[clientId];
        });

    })(++clientId);
});

API代码正常工作,当客户端调用method / api / xyz时,我在API的日志中看到'start'。

客户端(代理HTTP API请求):

app.use('/api', function(req, res) {

    req.on('close', function() {
        console.log('close');
    });

    var url = "http://localhost:8080/api" + req.url;
    req.pipe(request(url)).pipe(res);
});

客户端代码也很有效。当浏览器选项卡关闭时,我会在客户端应用程序的日志中看到“关闭”。

然而,问题是,当我关闭浏览器选项卡时,我在API的日志中看不到“关闭”。 API永远不会关闭连接,因为在API端永远不会检测到关闭事件。

有谁知道为什么?

0 个答案:

没有答案