我有一个使用WebSockets的Node.js服务器用于我的游戏。除了一件事,一切都很好。随着更多的玩家,游戏开始冻结。看起来好像数据包停止了,收集然后立即收到所有数据包。
导致这种情况的原因是什么?如何阻止这种情况发生?非常感谢任何帮助!!
编辑:此外,它并不是一直发生的,也不是经常发生的。我认为只有当球员投篮时才会发生。
this.wss.on('connection', function connection(ws) {
if (!originIsAllowed(ws.upgradeReq.headers.origin)) {
// Make sure we only accept requests from an allowed origin
//ws.terminate();
console.log(new Date() + 'Connection from origin ' + ws.upgradeReq.headers.origin + ' rejected.');
return;
}else {
console.log(new Date() + "New connection from " + ws._socket.remoteAddress);
self.emit('connect', new SocketIOClient(ws));
}
});
SocketIOClient:
WebSocketsClient.prototype.send = function(data) {
if(this.socket.readyState == 1) {
this.socket.send(data);
}
};
//Inside constructor
var self = this;
this.socket.onmessage = function incoming(event) {
self.emit('message', event.data);
}
this.socket.onerror = function () {
self.emit('error');
self.socket.terminate();
};
this.socket.onclose = function() {
self.emit('disconnect');
self.socket.terminate();
};
另一个编辑: 我有WireShark,但我真的不知道如何从中获取有用的信息。我有一个运行游戏的Linux VPS,我可以从中看到一些图表。它确实显示最大传入数据包(294.86 p / s)和传出(201.53 p / s)。有相当多的非常陡峭的山脉,这可能是游戏正在经历的滞后峰值。该图还显示20-40 p / s。这是另一个(日期)图表:Link