繁体   English   中英

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

[英]Tracking active users with Socket.io and Firebase

我有要尝试跟踪活动用户的Node / Express应用程序。

该应用程序依靠外部API来发行和接收JWT令牌。 这些令牌直接传递到客户端,在客户端存储它们并用于后续的API请求。 也就是说,我没有使用Node“会话”。

我正在使用socket.io挂接到自定义的loginlogoutdisconnect事件。 当这些事件触发时,我可以更新数据库(firebase)并根据需要添加/删除活动用户。

问题是我的应用在多个服务器之间实现了负载均衡,因此我无法通过socket.id为活动用户设置密钥,因为它可能会更改。 我的想法是通过user_iduser_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'})

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
        })

    });
});

如果不跟踪Node服务器中的用户会话,如何从disconnect事件中访问用户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的存储和显示方式的一些小事情。

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM