Javascript 通过WebSocket发送职位更新的正确方式是什么?

Javascript 通过WebSocket发送职位更新的正确方式是什么?,javascript,node.js,networking,websocket,socket.io,Javascript,Node.js,Networking,Websocket,Socket.io,我需要在运行node.js的游戏世界中广播位置更新。我现在的想法是使用。不过,我不确定什么是正确的使用方法。我有三个选择: 我目前使用的是socket.io:我以编程方式存储在给定时间内发生的位置更新缓冲区,然后一次发送所有更新: setTimeout(function(){ //called a fixed amount of times per second (40) //this variable will hold the accumulated position cha

我需要在运行
node.js
的游戏世界中广播位置更新。我现在的想法是使用。不过,我不确定什么是正确的使用方法。我有三个选择:

我目前使用的是
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流的对象并使用它吗?可能使用
流。编写
?还是别的什么办法?处理这个问题的正确方法是什么?

在我的用例中,Binary.JS似乎每次向管道写入数据包时都会写入一个数据包

为什么不将位置更改写入缓冲区,然后使用下划线.js的节流功能呢。您可以调用
update()
或其他任何函数,一次写入所有更改的整个缓冲区。您可以根据需要随时调用该函数,但请使用限制版本,这样它实际上最多只能以50毫秒左右的速度运行


这种延迟对于web应用程序来说是难以置信的快。确保您正在考虑您的客户可以接收和确认该信息的速率。老实说,在数据成功发送和确认之前,我不会更新客户端。否则,对于某些人来说,您的更新率将过高。

@Viclib抱歉,ACK==确认。当您发送TCP数据包时,会有一个ACK数据包发送回,让您知道数据已到达其目的地。当数据发送完成时,这通常通过Node.js中的回调公开。但是,它可以被缓存在线路的某个地方,而您的应用程序无法控制这一点。只要你在等待回调,你的状态就很好。