我正在使用Node和Socket IO,express尝试多人竞速游戏。因此,我尝试了一个简单的例子,以查看节点服务器和客户端之间的延迟。
我在客户端有一个可拖动的图像。当我在一个客户端移动图像时,所有客户端上的图像都必须移动。
因此,当我移动图像时,我以JSON格式将图像位置发送到节点服务器,然后从那里广播到所有客户端。从时间上看,大约需要300ms延迟。以下是结果。
客户端1将数据发送到服务器的时间戳为:286136 服务器接收到的时间戳为:286271
客户端2收到数据的时间戳为:286470 客户端3收到数据的时间戳为:286479 客户端4收到数据的时间戳为:286487 客户端5收到数据的时间戳为:286520
从客户端1到客户端5移动的延迟为384ms,对于赛车游戏来说太高了。 以下是我的服务器代码。
客户端1将数据发送到服务器的时间戳为:286136 服务器接收到的时间戳为:286271
客户端2收到数据的时间戳为:286470 客户端3收到数据的时间戳为:286479 客户端4收到数据的时间戳为:286487 客户端5收到数据的时间戳为:286520
从客户端1到客户端5移动的延迟为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不能异步地广播数据吗(我的意思是同时)?
谢谢 Kishorevarma