@Genya24

Обработка пользователей на сервере nodejs?

Добрый день!
Прошу помощи в понимании проектирования клиент-серверного приложения.

Сервер на nodejs, для соединения с клиентом используется socket IO, база данных MongoDB.

Мне необходимо авторизовать пользователя, после чего по ID получить данные с БД и после уже обрабатывать их на сервере.

Данные пользователя обрабатываются и изменяются с периодичностью раз в секунду.
Например
var io = require('socket.io').listen(server);
var timer;
io.on('connection', function (socket) {
    console.log('подключился пользователь');
    socket.on('disconnect', function () {
        console.log('пользователь отключился');
    });
    socket.on('initGame', (id) => { player.GetPlayerData(id,socket);});
});
// работа с данными пользователя

function UpdatePlayerData(data){
  setInterval(() => { 
   //обновление данных 
  }, 1000);
}
//получение данных с БД
function GetPlayerData(id, socket) {
    Player.findOne({ id: id}, function (err, res) {
        if (err) throw err;
             UpdatePlayerData(data);
        });  
}

Я понимаю как это будет работать с одним пользователем, но вот как работать с более чем одним.

Мои предположения:

при соединении добавлять сокет и данные для обработки в массив и раз в секунду производить перебор по этому массиву изменяя данные.
точно также и осуществлять рассылку данных клиенту.

Не могу сформировать в голове,как это должно выглядеть.

И еще смущает setInterval(func(),time), который не гарантирует повторение за установленное время. Как можно обрабатывать данные еще?

Заранее спасибо.
  • Вопрос задан
  • 137 просмотров
Решения вопроса 1
inoise
@inoise
Solution Architect, AWS Certified, Serverless
Единственный минус - именно таймер. Стоит освоить полностью событийное взаимодействие и все операции проводить именно так. Для примера, есть протокол GraphQL и в нем есть Subscription, работающий как раз на websocket. Другие операции в GraphQL сервере генерируют события и они отсылаются всем кто на них подписан.

В случае более сложном добавляется только хранение маппинга пользователь-соединение и отсылается на все соединения пользователя в цикле новые данные
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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