我正在尝试使用canvas,socket.io和node.js制作一个简单的多人游戏。 一切都没关系,直到另一个人连接(我打开另一个标签并在那里加载游戏)。当这种情况发生时,一切都会变慢并最终停止(我可以'四处走动)。
工作原理: 当有人连接到服务器时,服务器将其套接字保存在数组对象中并开始与客户端通信。客户端发送一个包含它的名称和位置的对象,然后服务器通过该套接字数组发送给所有连接的其他人。当客户端收到消息时,它会提取数据,对其执行某些操作(如基于位置绘图),然后设置10毫秒的超时以使用其位置和名称回复服务器。这种情况一直持续并且运行良好,直到我打开一个新窗口/标签并重新连接,正如我所说。
当我启动另一个客户端时为什么会变慢?这是代码:
server.js(这只是一段代码,其余部分来自socket.io示例)
io.sockets.on('connection', function (socket) {
socket.emit('init', {id: names[players.length], level: 5});
socket.on('got', function (data) {
console.log("got");
players.push(new Player(socket));
socket.emit('update', {msg: "ks"});
});
socket.on('update', function (data){
for (i = 0; i < players.length; i++)
{
players[i].socket.emit('update', {msg: data});
}
});
});
Player = function(socket)
{
this.socket = socket
}
game.js
self.socket.on('init', function (data) {
self.pl = new self.Player(data.id, data.level);
console.log(self.pl.id);
self.defined = true;
self.socket.emit('got', { my: "data" });
});
self.socket.on('update', function (data){
self.pars(data);
setTimeout(function(){self.socket.emit('update', {'pos': self.pl.pos, 'id': self.pl.id})}, 10);
});
答案 0 :(得分:2)
我的第一个想法是资源问题,我猜这都在你的本地机器上运行,你可能只是在吃掉所有的资源。
它可以是从cpu到连接的任何东西。很难说没有更多信息。
您的代码是否在一段时间内与客户端保持连接?