问题描述
node.js、socket.io、Nginx-proxy一起使用时,io.on('connection')会被连续调用。
我想通过创建多个聊天服务器来使用 redis pub 和 sub 交换数据,但由于连续的 io.on('connection') 调用,我无法继续。
我不知道要设置哪些附加设置。我需要帮助,请
Nginx代理配置如下
应用服务器代码如下。
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 (将#修改为@)