node.js、socket.io、nginx-proxy一起使用,io.on('connection')不断调用

问题描述

node.js、socket.io、Nginx-proxy一起使用时,io.on('connection')会被连续调用

我想通过创建多个聊天服务器来使用 redis pub 和 sub 交换数据,但由于连续的 io.on('connection') 调用,我无法继续。

我不知道要设置哪些附加设置。我需要帮助,请

Nginx代理配置如下

enter image description here

应用服务器代码如下。

app.set('port',process.argv[2] || process.env.PORT || 50000);

const proxy = httpProxy.createProxyServer({ ws : true });

var appServer = require('http').createServer(app);
appServer.on('upgrade',function (req,socket,head) {
    proxy.web(req,head);
});

const server = appServer.listen(app.get('port'),() => {
    globalRouter.logger.info('Express server listening on port ' + app.get('port'));

});

app.io.attach(server);

// sequelize
models.sequelize.sync().then( () => {
    globalRouter.logger.info("DB Connect Success");
}).catch( err => {
    globalRouter.logger.error("DB Connect Faield");
    globalRouter.logger.error(err);
})

app.use(function(req,res,next){
    if(isdisableKeepAlive){
        res.set('Connection','close');
    }
    next();
});

process.on('SIGTERM',shutDown); //정상종료 
process.on('SIGINT',shutDown); //비정상종료

function shutDown() {

    globalRouter.logger.info('Received kill signal,shutting down gracefully');
    server.close(() => {
        globalRouter.logger.info('Closed out rmaining connections');
        process.exit(0);
    });

    setTimeout(() => {
        globalRouter.logger.error('Could not close connections in time,forcefully shutting down');
        process.exit(1);
    },10000);
}

const socketRouter = require('./mySocket')(app.io);

socket连接代码如下。

io.sockets.on(ON_CONNECTION,function (socket) {
        onEachUserConnection(socket);
    });

    function onEachUserConnection(socket){
        globalRouter.print('-----------------------------');
        globalRouter.print('Connected => Socket ID: '+ socket.id + ',User: '+ socket.handshake.query.from);
        var from_user_id = socket.handshake.query.from;
        let userMapVal = {socket_id : socket.id};
        globalRouter.print(userMapVal);

        var res = globalRouter.getSocketIDFromMapForThisUser(from_user_id);
        if(undefined != res){
            globalRouter.print('already socket data discoonect');
            globalRouter.disconnectFunc(io.sockets.connected[res]);
        }

        globalRouter.addUserToMap(from_user_id,userMapVal);

        sub.on('subscribe',(roomSeq,count) => {
            console.log(`Subscribed to ${roomSeq}. Now subscribed to ${count} channel(s).`);
        })
    }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)