• Как в node правильно хранить промежуточные данные?

    dummyman
    @dummyman
    диссидент-схизматик
    под данные о текущих боях (расположение кораблей, ходы) сделал просто глобальный объект с массивами

    Я бы так не делал. Во первых, по хорошему, на каждый бой должен запускаться отдельный процесс. Чтобы процесс боя падая не убивал с собой весь стек сервисов. Хранить данные можно в памяти, можно файлом на разделе tmpfs.
    Не забывайте, важно не допускать race conditions.
    Если у вас используется express/connect, сведите к минимуму обращения middleware к глобальным объектам, и ни в коем случае не сохраняйте ничего в глобальных из middleware. Есть объекты для общих данных, например, app.locals, res.locals; есть много реализаций сессий.

    Позже заметил
    matrix[i] = Array('','','','','','','','','','');
    наверное, правильнее так
    matrix[i] = ['','','','','','','','','',''];

    Да и еще один тонкий момент. Здесь по коду у вас этого нет, но про это вам никто не скажет. Но вы обязательно посчитаете должным так делать. Во избежание утечек не изменяйте структуру объектов после их создания. Вся структура, прототип, все параметры объектов должны определяться до создания и в конструкторе.
    Ответ написан
    Комментировать
  • Как связать Socket.IO с сессиями express-session?

    @Quickerz
    Вариант 1. Пишем свой middleware, который будет шарить сессию

    var express = require("express");
    var Server = require("http").Server;
    var session = require("express-session");
    var RedisStore = require("connect-redis")(session);
    
    var app = express();
    var server = Server(app);
    var sio = require("socket.io")(server);
    
    var sessionMiddleware = session({
        store: new RedisStore({}), 
        secret: "secret",
    });
    
    sio.use(function(socket, next) {
        sessionMiddleware(socket.request, socket.request.res, next);
    });
    
    app.use(sessionMiddleware);
    
    app.get("/", function(req, res){
        req.session 
    });
    
    sio.sockets.on("connection", function(socket) {
      socket.request.session // Теперь сессия доступна через сокет
    });
    
    
    server.listen(8080);


    Вариант 2. Используем https://github.com/techpines/express.io
    Вариант рабочий, но есть нюансы с апи экспресса. Местами оно немного устаревшее.
    Ответ написан
    1 комментарий