У меня запущен проект приложения чата, и я обычно сохранял всех активных пользователей в массиве, выдвигая их userIds, сокеты и socket.ids, а затем просто вырезал из массива, как только пользователь отключился.Однако, как только будет другой сервер, я столкнусь с проблемой.Совместное использование памяти.Один сервер не будет знать, какие «активные пользователи» есть на другом, и наоборот.Есть ли быстрый и простой способ решить эту проблему?Возможно, я мог бы хранить эти сессии в 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 });
};