javascript - 为什么当另一个客户端(新选项卡)连接时我的多人 javascript 游戏速度变慢?

标签 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
}

游戏.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);        
 });

最佳答案

我的第一个想法是资源问题,我猜这一切都在您的本地计算机上运行,​​您可能正在耗尽所有资源。

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

您的代码是否始终保持与客户端的连接打开?

关于javascript - 为什么当另一个客户端(新选项卡)连接时我的多人 javascript 游戏速度变慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7276969/

相关文章:

javascript - 如何通过 Electron 应用程序中的 navigator.geolocation 获取当前位置?

javascript - React 函数不渲染

javascript - 隐藏手机面包屑导航中的最后一个文本 block - Prestashop

Node.JS HTML 到 PDF

javascript - Jquery 在点击类时附加按钮

javascript - Apostrope CMS 中的文章作者不会向未登录的用户显示

node.js - 无法在 Lambda 函数的模块外部使用 import 语句

Mysql 更改 Node.js 的监听器

python Socket.IO 客户端,用于向 TornadIO2 服务器发送广播消息

node.js - 在 Node 中保留聊天消息