2012-08-10 90 views
4

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

客户端1在将数据发送到服务器:286136(时间戳) 服务器接收到的:286479 Client4在接收到的数据:286470 Client3在接收到的数据:286271

客户机2在接收到的数据286487 客户机程序接收到的数据at: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)这是使用节点和websockets的预期延迟吗?
3)是socket io不能异步地广播数据(我的意思是同一时间)?

感谢 Kishorevarma

+0

你为什么不跟Reddwarfserver.org做演示? – felipe 2012-08-10 17:01:45

+1

你使用什么浏览器?这可能是由于使用不支持websocket的浏览器。这会增加大量的延迟。另外我猜你没有在本地运行你的服务器。您应该对服务器运行常规ping,并查看有多少延迟是纯网络。 – travis 2012-08-10 17:37:09

回答

3

我已经创建了几个实时这样的比赛。其中一个是多人游戏Asteroids(每个人都在拍摄小行星,合作游戏)。 我有很好的响应时间 - 但是,我不是“垃圾邮件”所有客户端数据太多 - 这可能是一个问题。我以每秒30帧的速度在服务器上处理物理数据,客户端运行速度为60 fps。 它只适用于所有客户端都是Chrome的(所以他们有网络套接字)。今天的大多数浏览器都支持Web套接字。 我会检查确保你先插座。其次,我不会向所有客户端发送太多数据:一种方法是以已知速率(例如每秒30帧)在服务器上处理物理数据。此外,正在处理客户端上的物理。将最终用户更改发送到30 fps边界上的所有客户端(不是在获取数据时)。 小行星,这意味着: 每个客户端和服务器知道以下几点:

  1. 如果每一个球员,船舶,一切有关船舶(面向方向,流动方向,如果升压是打开还是关闭)
  2. 如果每个子弹(位置,方向,速度,谁开的话)
  3. 如果每个小行星(位置,方向,速度)
  4. 30次,运行物理,重绘屏幕

Now ...

  1. 当客户给你一个要求(比如,旋转我的船到 右) - 客户端发送数据到服务器(和不 处理在本地)
  2. 当服务器获得用户请求时,它排队请求后成为 处理下一个“嘀”
  3. 服务器蜱(30次):进程的所有排队事件:
  4. 开启可旋转的船舶的请求:其实旋转船。广播 将数据发送给所有人(位置,面向方向,速度...)
  5. 当客户端从服务器获取更新事件时,它会引发新的 “将数据从服务器”更正为其本地空间。 注意:如果客户端无法以30 fps的速度处理所有数据,那么当发送数据时,船舶将“跳转”到正确的位置。
+0

非常感谢,有趣的阅读 – 2015-06-02 13:22:55