为什么我的多人游戏javascript游戏在另一个客户端(新标签页)连接时会变慢?

时间:2011-09-01 21:48:33

标签: javascript node.js socket.io

我正在尝试使用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);        
 });

1 个答案:

答案 0 :(得分:2)

我的第一个想法是资源问题,我猜这都在你的本地机器上运行,你可能只是在吃掉所有的资源。

它可以是从cpu到连接的任何东西。很难说没有更多信息。

您的代码是否在一段时间内与客户端保持连接?