現在、チャット アプリ用に 2 つの Node.js アプリを開発しています。最初のアプリはバックエンド ロジックを処理する API で、もう 1 つのアプリは API を使用するクライアント (Angular.JS のフロントエンド) です。
クライアント アプリは、HTTP リクエストを API にプロキシするためにリクエスト モジュールを使用しています。 -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 のログに「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側でcloseイベントが検出されないため、APIで接続が閉じられることはありません。
誰かが理由を知っていますか?