首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过WebSockets发送位置更新的正确方法是什么?

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

Stack Overflow用户
提问于 2014-03-10 20:22:05
回答 1查看 303关注 0票数 3

我需要在与node.js一起运行的游戏世界中播放位置更新。我目前的想法是使用BinaryJS。不过,我不知道什么是正确的使用方法。我想了三个选择:

如何使用socket.io:以编程方式存储在给定时间内发生的位置更新缓冲区,然后立即全部发送:

代码语言:javascript
复制
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自己做分块(是吗?),那么我是否应该在每次发生时不加区分地发送位置更改?

代码语言:javascript
复制
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在一起?或者其他方式?处理这个问题的正确方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-10 20:50:48

在我的用例中,每次您写到管道时,Binary.JS似乎都会写一个包。

为什么不将位置更改写入缓冲区,然后使用Underscore.js的节流。您可以调用update()或其他任何东西,它同时写入整个更改缓冲区。您可以随心所欲地调用该函数,但是使用节流版本,这样它实际上只能在每50 as左右的时间内运行一次。

对于web应用程序来说,这种延迟是非常快的。请确保您正在考虑您的客户可以收到的速度和ACK的信息。老实说,在数据成功发送和ACKed之前,我不会更新客户端。否则,对于某些人来说,您的更新速度太高了。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22310497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档