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

为什么当另一个客户端(新标签)连接时,我的多人javascript游戏会变慢?,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我正在尝试使用canvas、socket.io和node.js制作一个简单的多人游戏。 在其他人连接之前,一切都正常(我打开另一个选项卡并在那里加载游戏)。当这种情况发生时,一切都会变慢并最终停止(我不能四处走动) 工作原理: 当有人连接到服务器时,服务器将其套接字保存在一个数组对象中,并开始与客户端通信。客户端发送一个包含其名称和位置的对象,然后服务器通过该套接字数组将其发送给连接的所有其他人。当客户机收到消息时,它提取数据,对数据进行处理(如根据位置绘制),然后设置10毫秒的超时时间,以回复

我正在尝试使用canvas、socket.io和node.js制作一个简单的多人游戏。 在其他人连接之前,一切都正常(我打开另一个选项卡并在那里加载游戏)。当这种情况发生时,一切都会变慢并最终停止(我不能四处走动)

工作原理: 当有人连接到服务器时,服务器将其套接字保存在一个数组对象中,并开始与客户端通信。客户端发送一个包含其名称和位置的对象,然后服务器通过该套接字数组将其发送给连接的所有其他人。当客户机收到消息时,它提取数据,对数据进行处理(如根据位置绘制),然后设置10毫秒的超时时间,以回复服务器他的位置和名称。正如我所说的,在我打开一个新窗口/选项卡并重新连接之前,这种情况会一直持续下去,并且运行良好

为什么当我启动另一个客户机时速度会变慢?代码如下:

js(这只是一段代码,其余来自socket.io示例)


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

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


您的代码是否一直保持与客户端的连接处于打开状态?

作为旁白,我将使用第二个客户端。为了实现这一点,我同时运行Firefox和Chrome。如果问题继续出现,那么我建议你有一个真正的问题。但我甚至在不同的计算机上尝试过,我不认为使用两个不同的浏览器可以解决任何问题,如果你是这么建议的话!不过我会试试的,谢谢你的提示。如果它刚开始变慢,然后停下来,那听起来像是一个递归错误。。。跟踪并查看是否运行了不应该运行的代码。您的意思是两张图片和一个绿色背景可以做到这一点?好吧,我希望这就是问题所在,但当我难过时,我在不同的计算机上运行了它,问题仍然存在!你每10毫秒进行一次网络通信,听起来压力很大。我猜这是一台计算机处理服务器(每10毫秒2个连接)和一台客户端(每10毫秒1个连接)。我敢打赌,如果你把它提高到100毫秒,你会看到更好的性能。我应该说是消息而不是连接,因为看起来连接会保持打开状态。嘿!原来你是对的!它现在不会延迟/暂停!谢谢,伙计,有没有什么方法可以让你喜欢,给你荣誉点?他的答案旁边有一个复选标记,表明这个答案很有帮助,解决了你的问题(只针对主要答案,而不是评论)。但你也可以投票决定答案。
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
}
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);        
 });