我正在进行一个聊天应用程序项目,我曾经将所有活动用户存储在一个数组中,推送他们的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 });
};