2

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

客户端应用程序正在使用请求模块将 HTTP 请求代理到 API,因为在我找到这篇文章之前我无法让它们相互通信: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 代码正在运行,当客户端调用方法 /api/xyz 时,我在 API 的日志中看到“开始”。

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

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 端永远不会检测到关闭事件。

有谁知道为什么?

4

0 回答 0