gpt4 book ai didi

node.js - 使用 Nodejs 和 Socket IO 的多人游戏

转载 作者:搜寻专家 更新时间:2023-10-31 23:14:11 24 4
gpt4 key购买 nike

我正在尝试使用 Node 和 Socket IO express 的多人赛车游戏。所以我尝试了一个简单的例子来查看 Node 服务器和客户端之间的延迟。 我在客户端有一个可拖动的图像。当我将图像 ienter 代码移到一个客户端时,它必须在所有客户端中移动。所以基本上当我移动图像时,我将图像位置以 json 格式发送到 Node 服务器,然后从那里我向所有客户端广播。从那时起大约有 300 毫秒的延迟。以下是结果。

客户端 1 向服务器发送数据:286136(时间戳) 服务器收到:286271

Client2 在 286470 收到数据Client3 在 286479 收到数据Client4 收到数据:286487Client5 在 : 286520 接收到数据

从 client1 移动到 client5 之间的延迟是 384ms。对于赛车游戏来说太高了..这是我的服务器代码。

var app = require('express').createServer();  
var io = require('socket.io');
var http = require('http');
var http_server = http.createServer();
var server = http.createServer(app);
server.listen(3000);

var socket = io.listen(server,{ log: false });

socket.sockets.on('connection', function (client) {
client.on('message', function (data){
console.log("data arrived to server",new Date().getTime());
// Below both statements are giving same latency between the client 1 and client 5
client.broadcast.emit('message',data);
//socket.sockets.emit('message',data);
});
});

1)有什么办法可以优化服务端代码来降低延迟?
2) 这是使用 Node 和 websockets 的预期延迟吗?
3) socket io 是否不能异步广播数据(我的意思是同时)?

谢谢基肖尔瓦玛

最佳答案

我已经创建了几个这样的实时游戏。一个是多人小行星(每个人都在向小行星射击,合作游戏)。我的响应时间很长——但是,我并没有用太多数据向所有客户“发送垃圾邮件”——这可能是个问题。我让游戏在客户端以 60 fps 的速度运行,而服务器以 30 fps 的速度处理物理。它仅在所有客户端都是 Chrome 时才有效(因此它们具有网络套接字)。现在大多数浏览器都支持网络套接字。我会先检查以确保您有 socket 。其次,我不会向所有客户端发送太多数据:一种方法是以已知速率(例如每秒 30 帧)在服务器上处理物理。另外,在客户端处理物理。在 30 fps 边界内(不是在您获取数据时)向所有客户端发送最终用户更改。对于小行星,这意味着:每个客户端和服务器都知道以下内容:

  1. 每艘玩家飞船所在的位置,以及与该飞船相关的所有信息(面向方向、漂浮方向、加速开启或关闭)
  2. 每颗子弹的位置(位置、方向、速度、发射者)
  3. 每颗小行星的位置(位置、方向、速度)
  4. 每秒 30 次,运行物理,重绘屏幕

现在...

  1. 当客户向您提出要求时(例如,将我的船转到右)——客户端将该数据发送到服务器(并且不在本地处理)
  2. 当服务器收到用户请求时,它会将请求排队等待处理下一个“tick”
  3. 服务器滴答(每秒 30 次):处理所有排队的事件:
  4. 关于轮换船舶的请求:实际轮换船舶。播送给每个人的船舶数据(位置、朝向、速度……)
  5. 当客户端从服务器获取更新事件时,它会填充新的从服务器到它的本地空间的“正确”数据。注意:如果客户端无法以 30 fps 的速度处理所有内容,发送数据时飞船将“跳”到它们的正确位置。

关于node.js - 使用 Nodejs 和 Socket IO 的多人游戏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11906145/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com