アクティブなユーザを追跡しようとしている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にアクセスするにはどうすればよいですか?
私は以前の回答[ここ](http://stackoverflow.com/questions/37591541/how-to-change-status-of-perticular-user-when-socket-is-disconnect/37592164#37592164)を投稿しました。それは助けるかもしれない – Rho