Socket.io node.js-套接字IO在一段时间后超时

Socket.io node.js-套接字IO在一段时间后超时,socket.io,Socket.io,我正试图为我自己的多人游戏建立一个socket.io服务器,但由于某种原因,服务器在一段时间后会停机,我不知道为什么。我尝试了几种运行服务器的方法(nodemon和forever,无论有无屏幕)。我不认为这是一个不活动的问题,因为我添加了一个随机的东西生成器来模拟服务器上的一些活动,但问题仍然存在。运行服务器的cpu负载保持在2-3%之间。我正在运行node 4.x和当前稳定的socket.io构建(1.3.6) 这是我的代码: var shortId=require('shortId'), i

我正试图为我自己的多人游戏建立一个socket.io服务器,但由于某种原因,服务器在一段时间后会停机,我不知道为什么。我尝试了几种运行服务器的方法(nodemon和forever,无论有无屏幕)。我不认为这是一个不活动的问题,因为我添加了一个随机的东西生成器来模拟服务器上的一些活动,但问题仍然存在。运行服务器的cpu负载保持在2-3%之间。我正在运行node 4.x和当前稳定的socket.io构建(1.3.6)

这是我的代码:

var shortId=require('shortId'),
io=require('socket.io')(process.env.PORT | | 4567),
mysql=require('mysql'),
connection=mysql.createConnection({
主机:“localhost”,
用户:“xxx”,
密码:“xxx”,
数据库:“xxx”
});
var客户=[];
var clientLookup={};
//放置的组件(从玩家或环境中构建的东西)
var placed_components='Server1_PlacedC';
connection.connect(函数(err){
如果(错误){
console.error('连接错误:'+err.stack);
返回;
}
});
setInterval(函数(){
var random=Math.random();
//connection.query(
//'插入到'+placed_components+'集合',
//{数据:倒计时},
//函数(错误、结果){
//如果(错误)抛出错误;
//    }
//);
控制台日志(随机);
}, 100);
io.on('连接',函数(套接字){
var-currentClient;
console.log('connected',socket.id);
//////////////////////////////////////////////////////////////////////////////  
socket.on('disconnect',function(){
console.log('player disconnected',currentClient.id);
socket.broadcast.emit('disconnected',currentClient)
var index=clientLookup[currentClient.id];
客户。拼接(索引,1);
})
/////////////////////////////////////////////////////////////////////////////    /
socket.on('register',函数(数据){
currentClient={
id:shortId.generate(),
健康:100,
isDead:错
};
console.log('registing',currentClient.id);
clients.push(currentClient);
clientLookup[currentClient.id]=currentClient;
emit('registerSuccess',{id:currentClient.id});
emit('spawn',{id:currentClient.id});
console.log('connected player',clients.length);
clients.forEach(函数(客户端){
if(currentClient.id==client.id)
返回;
emit('spawn',{id:client.id});
log('sending spawn to new player for playerid',client.id');
})
});
socket.on('beep',函数(){//beep请求
socket.emit('boop');
log(“收到一些嘟嘟声!”);
});
socket.on('move',函数(数据){
data.id=currentClient.id;
socket.broadcast.emit('move',data);
//log(JSON.stringify(data));
});
socket.on('ShareObject',函数(数据){
data.id=currentClient.id;
socket.broadcast.emit('ReveiveObject',data);
log(JSON.stringify(data));
});
socket.on('SharePlayerImation',函数(数据){
data.id=currentClient.id;
socket.broadcast.emit('broadcastPlayerImation',data);
log(“一个玩家改变了他的动画”+JSON.stringify(数据));
});
//////////////////////////////////////////////////////////////////////////////
socket.on('benchmark',函数(数据){
控制台日志(数据);
});
//////////////////////////////////////////////////////////////////////////////
})
log('服务器已启动');

当服务器停止时,控制台中是否出现任何东西?我不知道。我的putty会话刚刚超时,以获取控制台上的最后信息。在套接字服务器超时/崩溃之前,可能需要一个多小时。也许我能找到一个解决方案,用nodemon或forever创建一个崩溃转储日志,但我不知道怎么做。greezIf如果您永远使用,这意味着您在某处有一个日志文件,因为它默认创建了一个。我找到了一种方法来创建我自己的输出和错误日志文件。我将再次运行我的服务器几个小时,直到它再次崩溃。发生这种情况时,我会发布日志文件。我从forever切换到pm2。这是我从其中一个集群得到的错误日志,它在4-5小时后关闭了所有运行的集群:IPC通道主服务器关闭错误:连接丢失:服务器关闭了连接。Socket的Protocol.end(/root/node\u modules/mysql/lib/Protocol/Protocol.js:103:13)。(/root/node_modules/mysql/lib/Connection.js:88:28)在emitNone(events.js:72:20)在Socket.emit(events.js:166:7)在endReadableNT(_stream_readable.js:893:12)在doNTCallback2(node.js:429:9)在process._tickDomainCallback(node.js:384:17)在服务器停止时控制台中是否出现任何东西?我不知道。我的putty会话刚刚超时,以获取控制台上的最后信息。在套接字服务器超时/崩溃之前,可能需要一个多小时。也许我能找到一个解决方案,用nodemon或forever创建一个崩溃转储日志,但我不知道怎么做。greezIf如果您永远使用,这意味着您在某处有一个日志文件,因为它默认创建了一个。我找到了一种方法来创建我自己的输出和错误日志文件。我将再次运行我的服务器几个小时,直到它再次崩溃。发生这种情况时,我会发布日志文件。我从forever切换到pm2。这是我从其中一个集群得到的错误日志,它在4-5小时后关闭了所有运行的集群:IPC通道主服务器关闭错误:连接丢失:服务器关闭了连接。Socket的Protocol.end(/root/node\u modules/mysql/lib/Protocol/Protocol.js:103:13)。(/root/node_modules/mysql/lib/Connection.js:88:28)在emitNone(events.js:72:20)在Socket.emit(events.js:166:7)在endReadableNT(_stream_readable.js:893:12)在doNTCallback2(node.js:429:9)在process._tickDomainCallback(node.js:384:17)