我目前正在为我的聊天应用开发两个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端永远不会检测到关闭事件。
有谁知道为什么?