3

私はnode.jsでsocket.ioを使用しており、ルートの1つに接続イベントハンドラーがあります。

            app.io.on('connection', function(socket) {
                    console.log('connect');

                    socket.on('disconnect', function(){
                        console.log('disconnect');
                        res.end();
                    });
            });

このルートを呼び出しているページを更新するたびに、加算され続けるようです。たとえば、5 回更新すると、1 回の更新で 5 つの「接続」メッセージがログに記録されます。

これを制限してこれを行わないようにする良い方法はありますか?

ありがとう!

編集:

繰り返し更新すると、次のエラーが表示されます。

(ノード) 警告: EventEmitter のメモリ リークが検出された可能性があります。11人のリスナーが追加されました。制限を増やすには、emitter.setMaxListeners() を使用します

上限を上げればいいのですが、それは正解ではない気がします。

4

1 に答える 1

5

リクエスト ハンドラ (リクエストごとに呼び出される) の外側にコードを配置する必要があります。このコードは、(各リクエストではなく) すべてのクライアントの着信接続を処理することになっています。あなたの例では、リクエストごとに新しいイベントリスナーを作成します。必要なのは1つだけです!

于 2012-04-03T21:40:20.380 に答える