微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。