Javascript 使用Socket.io和Firebase跟踪活动用户

Javascript 使用Socket.io和Firebase跟踪活动用户,javascript,node.js,express,socket.io,Javascript,Node.js,Express,Socket.io,我有一个Node/Express应用程序,我正在尝试跟踪其活动用户 该应用程序依赖外部API来发布和接收JWT令牌。这些令牌直接传递给客户机,在那里存储并用于后续的API请求。也就是说,我没有使用节点“会话” 我正在使用钩住自定义的登录,注销和断开连接事件。当这些事件触发时,我可以根据需要更新DB(firebase)并添加/删除活动用户 问题是,我的应用程序在多个服务器上实现了负载平衡,因此我无法通过socket.id为活动用户设置关键帧,因为它可能会更改。我的想法是通过user\u id为活动

我有一个Node/Express应用程序,我正在尝试跟踪其活动用户

该应用程序依赖外部API来发布和接收JWT令牌。这些令牌直接传递给客户机,在那里存储并用于后续的API请求。也就是说,我没有使用节点“会话”

我正在使用钩住自定义的
登录
注销
断开连接
事件。当这些事件触发时,我可以根据需要更新DB(firebase)并添加/删除活动用户

问题是,我的应用程序在多个服务器上实现了负载平衡,因此我无法通过
socket.id
为活动用户设置关键帧,因为它可能会更改。我的想法是通过
user\u id
为活动用户设置密钥,但是,我不知道如何从
disconnect
事件中获取用户id。其他事件由客户端触发,因此我可以将用户ID发送到服务器

client.js

import io from 'socket.io-client';

const socket = io('/');

socket.emit('login', {user_id: 1234, email: 'example@gmail.com'})
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
        })

    });
});
server.js

import io from 'socket.io-client';

const socket = io('/');

socket.emit('login', {user_id: 1234, email: 'example@gmail.com'})
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?

我不确定您的确切情况,但以下是一些对我有效的代码:

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
的存储和显示方式做一些小改动

希望这有帮助

我发布了之前的答案,可能会有所帮助