什么是通过WebSockets发送位置更新的正确方法?

我需要在运行node.js的游戏世界中广播位置更新。 我目前的想法是使用BinaryJS 。 不过,我不确定使用它的正确方法是什么。 我曾经想过3个选项:

我现在怎么样,使用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]); }; 

或者我应该不知何故创build一个对象派生node.js的stream和使用它? 也许与stream.write ? 还是以其他方式? 处理这个问题的正确方法是什么?

Binary.JS似乎在每次写入pipe道时写入一个数据包,在我的用例中。

为什么不将位置更改写入缓冲区,然后使用Underscore.js的限制。 你可以调用update()或者其他的,一次写入整个缓冲区的变化。 您可以随意调用该函数,但是使用受限制的版本,以便实际上每隔50ms左右运行一次。

Web应用程序的这种延迟非常快。 确保你正在考虑你的客户可以接收和确认信息的速度。 老实说,我不会更新客户端,直到数据成功发送并确认。 否则,对于某些人来说,你会有太高的更新率。