2

現在、チャット アプリ用に 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で接続が閉じられることはありません。

誰かが理由を知っていますか?

4

0 に答える 0