2012-04-03 11 views
3

node.jsでsocket.ioを使用していて、自分のルートの1つに接続イベントハンドラがあります。各リフレッシュ時にSocket.ioの接続が盛り上がる

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

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

私はこのルートを呼び出しているページを更新するたびに、単一のリフレッシュに、メッセージを「接続」私は5回を更新した場合、私は5を持っ終わるだろう、例えば、アップ追加し続けるように思われます、ログに記録されます。

これを制限する良い方法はありますか?

ありがとうございます!

編集:私は繰り返し更新すると

、私はこのエラーを取得:

(node) warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit

私は上限を増やすことができますが、私はノー正解だ気持ちを持っています。

答えて

4

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

+0

私はこれを実行していますが、動作しますが、接続ハンドラがルート外で最初に定義されている場合、ルートコード内のデータをソケット接続ハンドラに渡す必要があります。私のルートからのオブジェクト、私の接続ハンドラに戻る? – dzm

+0

配列を使用して、http-requestから送られてくるオブジェクトを格納し、接続ハンドラ内で読み取ることができます。しかし、私は接続しているクライアントにhttp-requestを使ってデータを送ることを前提としています。この場合、 'app.io.emit( 'myEvent'、{hello world '});'あなたのリクエストハンドラの中で。 – stewe

+0

パーフェクト、そう、これはうまくいくはずです。ありがとうございます – dzm

関連する問題