我需要在与node.js一起运行的游戏世界中播放位置更新。我目前的想法是使用BinaryJS。不过,我不知道什么是正确的使用方法。我想了三个选择:
如何使用socket.io:以编程方式存储在给定时间内发生的位置更新缓冲区,然后立即全部发送:
setTimeout(function(){
//called a fixed amount of times per second (40)
//this variable will hold the accumulated position changes on the last 25ms
//var accumulated_position_changes = [id0,x0,y0,z0, id1,x1,y1,z1...];
client.send(accumulated_position_changes);
},25);但是,如果binary.js自己做分块(是吗?),那么我是否应该在每次发生时不加区分地发送位置更改?
MyClass.prototype.set_position = function(x,y,z){
// this is called thousands times a second
this.x = x, this.y = y, this.z = z;
client.send([this.id, x, y, z]);
};或者我应该以某种方式创建一个对象,派生node.js流并使用它?也许和stream.write在一起?或者其他方式?处理这个问题的正确方法是什么?
发布于 2014-03-10 20:50:48
在我的用例中,每次您写到管道时,Binary.JS似乎都会写一个包。
为什么不将位置更改写入缓冲区,然后使用Underscore.js的节流。您可以调用update()或其他任何东西,它同时写入整个更改缓冲区。您可以随心所欲地调用该函数,但是使用节流版本,这样它实际上只能在每50 as左右的时间内运行一次。
对于web应用程序来说,这种延迟是非常快的。请确保您正在考虑您的客户可以收到的速度和ACK的信息。老实说,在数据成功发送和ACKed之前,我不会更新客户端。否则,对于某些人来说,您的更新速度太高了。
https://stackoverflow.com/questions/22310497
复制相似问题