2017-04-04 26 views
0

私は、クライアントからのリッスンを受信したサーバーでセットアップを行い、リアルタイムの通知を送信します。サーバーのコードは次のようになります。通知は、DBから出るたびリフレッシュするたびにsocket.io接続に別のリスナーが追加されます

var io = require('socket.io').listen(8888); 
 

 
io.sockets.on('connection', function (socket) { 
 
\t socket.emit('connected', { connected: true }); 
 
\t console.log("New user " + socket.id); 
 
    
 
    \t socket.on('ready for data', function (data) { 
 
\t pg_client.on('notification', function(content) { 
 
      socket.broadcast.to('ROOM').emit('update', content) 
 
    }); 
 
    }); 
 
}); 
 
\t \t \t

ROOM内のすべてのクライアントは、メッセージが表示されます。これはうまくいきますが、クライアントがページを更新すると、今度は2回リッスンして、更新ごとに2つの通知を受け取ります。 socket.idは追加されますが、決して遠ざかりません。ここでは、クライアントコードは次のとおりです。

var socket = require('socket.io-client')('http://IP:8888') 
 
socket.on('connected', function (data) { 
 
\t socket.emit('ready for data', {}); 
 
}); 
 

 
// Triggered by an addChannel function 
 
socket.emit('add room', {room: 'ROOM'}) 
 

 
socket.on('update', function(data) { 
 
    // This gets hit multiple times per update, depending on the number of client refreshes 
 
})

私は運と、クライアントとサーバ側の両方にonためonceを代入しようとしました。これが通ってくるための唯一の最初の更新を引き起こし、ノー他人

答えて

1

それはあなたがこのために新しいイベントハンドラ作成され、新しいソケットが接続するたびに次のようになります。これらのイベントハンドラは、このように

pg_client.on('notification', ...) 

をします新しいページが接続するたびに1つずつ追加すると蓄積されます。それは、リフレッシュがすべて新しいページ接続と同じであるため、ページリフレッシュ時に表示される動作を説明することができます。このイベントハンドラは、新しいソケットが接続されるたびにではなく、サーバーの初期化時に1回登録する必要があります。

var io = require('socket.io').listen(8888); 

io.sockets.on('connection', function (socket) { 
    socket.emit('connected', { connected: true }); 
    console.log("New user " + socket.id); 

    socket.on('ready for data', function (data) { 
    }); 
}); 


pg_client.on('notification', function(content) { 
    io.to('ROOM').emit('update', content) 
}); 
+0

これは、コールバックの外側に 'ソケット 'が存在しないため、'ソケットが定義されていません'というエラーにつながります。編集:接続されたすべてのクライアントを繰り返し行う可能性がありますが、私は何かが不足していない限り、これはsocket.ioとトリッキーです。 –

+0

@BonnieScott - 'socket.broadcast.to()'を 'io.to()'に変更します。 – jfriend00

+0

ありがとうございます。これは今完全な検証を行っているようです... –

関連する問題