Как определить, с какого сеанса происходит соединение через веб-сокет? - PullRequest
0 голосов
/ 06 июня 2019

Я работаю над игрой.У каждого игрока есть сеанс, в котором после входа я сохраняю его имя.После входа каждый игрок подключается через веб-сокет.Как привязать сеанс проигрывателя к веб-сокету?Я хотел бы убедиться, что каждая сессия игрока может открыть только одну веб-розетку одновременно, если он открывает другую (например, в новой вкладке), я закрываю предыдущую.

let express = require('express'),   
    app = express(),
    cookie = require('cookie'),
    fs = require('fs'),
    server = require('http').Server(app), 
    webSocket = require('ws'),
    session = require('express-session');

let wss = new webSocket.Server({ 
        verifyClient: (info, done) => {
            sessionParser(info.req, {}, () => {
            // there is no connect.sid when I place application on server, however on local it exists
                done(info.req.session);
            });
    }, server 
});

const sessionParser = session({
    secret: '$eCuRiTy',
});

app.use(sessionParser);

server.listen(3000);

app.post('/signIn', async function(req, res) {
        console.log(req.sessionID); // I want to get the sessionID in websocket
        res.send(true);
});

wss.on('connection', async function(ws, req) {
    console.log(req.sessionID);  // I want to get sessionID from post req.sessionID
});

Если я запускаюприложение на локальном хосте, все отлично работает.req.sessionID из записи аналогичен req.sessionID в websocket.

Однако, если я размещаю приложение на сервере, сеансы будут другими.В заголовках в информационном объекте в verifyClient connect.sid не существует.

Как это исправить?

...