2017-01-23 3 views
0

アクティブなユーザを追跡しようとしているNode/Expressアプリがあります。Socket.ioとFirebaseを使ってアクティブなユーザを追跡する

このアプリは、JWTトークンの発行と受信に外部APIを使用しています。これらのトークンはクライアントに直接渡され、クライアントに格納され、後続のAPI要求に使用されます。つまり、ノード「セッション」を使用していません。

私はsocket.ioを使用して、カスタムlogin,logoutおよびdisconnectイベントにフックしています。これらのイベントが発生すると、DB(firebase)を更新し、必要に応じてアクティブなユーザを追加/削除することができます。

問題は、私のアプリがいくつかのサーバーに負荷分散されているため、アクティブユーザーのキーをsocket.idで変更できない可能性があるためです。私の考えは、アクティブなユーザーをuser_idでキーすることでしたが、disconnectイベントからユーザーIDを取得する方法がわかりません。他のイベントは

client.js

import io from 'socket.io-client'; 

const socket = io('/'); 

socket.emit('login', {user_id: 1234, email: '[email protected]'}) 

server.js

io.on('connection', (socket) => { 
    const activeUsersRef = admin.database().ref('activeUsers'); 

    socket.on('login', (userData) => { 
     activeUsersRef.update({ 
      [userData.user_id]: userData 
     }) 
    }); 

    socket.on('logout', (userData) => { 
     activeUsersRef.update({ 
      [userData.user_id]: null 
     }) 
    }); 

    socket.on('disconnect',() => { 

     // How to get user ID? 
     activeUsersRef.update({ 
      [???]: null 
     }) 

    }); 
}); 
...ので、私は、サーバーにユーザーIDを送信することができ、クライアントによってトリガされています

ノードサーバーでユーザーセッションを追跡していない場合、disconnectイベントからユーザーIDにアクセスするにはどうすればよいですか?

+1

私は以前の回答[ここ](http://stackoverflow.com/questions/37591541/how-to-change-status-of-perticular-user-when-socket-is-disconnect/37592164#37592164)を投稿しました。それは助けるかもしれない – Rho

答えて

0

私はあなたの正確なシナリオがあるが、ここでは私のために働いていたいくつかのコードが何であるかわからない:

io.on('connection', function(socket){ 

    socket.on('chat message', function(msg){ 
    io.emit('chat message', msg); 
    }); 

    socket.on('login', (userData) => { 
     socket.on('disconnect', function() { 
      console.log(userData); 
     }); 
    }); 
}); 

明らかにあなたはuserDataが保存され、表示されている方法についてのいくつかのマイナーなものを変更する必要があります。

これが役に立ちますようお願いいたします。

関連する問題