@miki131

Как сделать cluster для чата?

Пишу чат, который будет с большим количеством подключений.
В чате требуется проверка пользователей на бан.

Для того чтобы держать много подключений использую cluster
var cluster = require('cluster'),
    numCPUs = require('os').cpus().length;

if (cluster.isMaster) {
    for (var i = 0; i < numCPUs; i++) {
        cluster.fork();
    }
}

if (cluster.isWorker) {
    var io = require('socket.io').listen(2001);

    io.sockets.on('connection', function (socket) {
        console.log('connected to worker id ', cluster.worker.id);
    });
    io.sockets.on('user-message', function (socket) {
        // здесь не знаю что делать
    });
}

После того как пользователь отправляет сообщение мне нужно проверить не забанен ли пользователь.
Я представлял себе что будет общий объект
USERS = {
 1: {id: 1, banned: false},
 2: {id: 3, banned: true}
 ......
}

и при каждом событии проверять его на бан.
Как это делать и где хранить этот объект?

Есть такая мысль - хранить его в мастере и из «воркера» через process.send(); посылать все что пришло на сокет, там же, в мастере, проверять и делать рассылку всем.
  • Вопрос задан
  • 205 просмотров
Пригласить эксперта
Ответы на вопрос 1
webus
@webus
Golang | Python | NodeJS | Java
Вангую проблемы с handshake :) Советую сразу взглянуть на https://github.com/indutny/sticky-session
По вопросу, храните в Redis.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы