如何识别Websocket连接来自哪个会话?

时间:2019-06-06 13:12:14

标签: node.js express express-session ws

我正在研究游戏。每个玩家都有一个会话,登录后我会保留他的名字。登录后,每个播放器都通过websocket连接。 如何将播放器会话绑定到网络套接字?我想确保每个玩家会话只能同时打开一个websocket,如果他打开另一个websocket(例如在新选项卡中),则我将关闭上一个websocket。

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与websocket中的req.sessionID相同。

但是,如果我将应用程序放置在服务器上,则会话是不同的。 在verifyClient的info对象的标头中connect.sid不存在。

我该如何解决?

0 个答案:

没有答案