Socket.IO存储活动用户

时间:2018-10-08 13:01:43

标签: javascript node.js sockets express socket.io

我正在进行一个聊天应用程序项目,我曾经将所有活动用户存储在一个数组中,推送他们的userIds,socket和socket.ids,然后在用户断开连接时简单地从数组中切片。但是,一旦有其他服务器,我将遇到问题。内存共享。一台服务器不知道另一台服务器有什么“ activeUsers”,反之亦然。 有没有快速简便的方法来解决此问题?也许我可以将这些会话存储在MongoDB中?还是Redis是唯一的选择?

  io.sockets.on('connection', async (socket, next) => {
  const token = socket.handshake.query.token;
  const decoded = await jwt.decodeId(token);
  const userId = decoded.id;
  await socketUtil.handleUserConnection(userId, socket.id);
  socket.on('disconnect', async () => {
    await socketUtil.handleUserDisconnect(socket.id);
  });
});

export const handleUserConnection = async (userId, socketId) => {
  const sum = await Sock.countDocuments();
  const socket = await Sock.create({
    leasedAt: new Date(),
    userId,
    socketId,
  });
  if (!socket) {
    logger.error('Socket creation error:', socketId);
  }
  logger.info(userId + ' connected (' + sum + ')');
};

export const handleUserDisconnect = async (socketId) => {
  const sum = await Sock.countDocuments();
  logger.info('User disconnected (' + sum + ')');
  await Sock.deleteMany({ socketId });
};

0 个答案:

没有答案