Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过共享消息队列的异步回调_Javascript_Design Patterns - Fatal编程技术网

Javascript 通过共享消息队列的异步回调

Javascript 通过共享消息队列的异步回调,javascript,design-patterns,Javascript,Design Patterns,我正在创建一个通过WebSocket连接的网络游戏 创建在websocket中处理调用的消息传递系统非常简单。挑战在于呼叫响应。“请求世界块0,0”非常简单。我需要的是一种区分消息返回的方法。我向服务器发送一个数据请求,通过websocket返回的下一条消息可能是任何内容:玩家动作、分数更改、物理同步数据等 我能想到的最佳解决方案是为调用生成一个UUID,将该UUID作为返回数据的一部分,然后为该UUID运行回调(或承诺)。(即:{request:'Get 0,0',id:'1234'}{res

我正在创建一个通过WebSocket连接的网络游戏

创建在websocket中处理调用的消息传递系统非常简单。挑战在于呼叫响应。“请求世界块0,0”非常简单。我需要的是一种区分消息返回的方法。我向服务器发送一个数据请求,通过websocket返回的下一条消息可能是任何内容:玩家动作、分数更改、物理同步数据等

我能想到的最佳解决方案是为调用生成一个UUID,将该UUID作为返回数据的一部分,然后为该UUID运行回调(或承诺)。(即:
{request:'Get 0,0',id:'1234'}
{response:DATA,id:'1234'}
)。然后我需要跟踪请求方的所有承诺,并管理某种超时系统

我试图找到一种更好的设计模式:通过一条通信线路异步回调的方法。有没有比回调ID系统更好的设计?是否已经有一个浏览器/Nodejs包可以轻松地处理这个问题


注意:我在这里提到WebSocket,但我也希望webworker元素会遇到类似的问题/解决方案:“创建物理对象”,但物理线程的下一条消息可能是冲突消息或渲染器更新消息。

回调ID工作正常,但需要服务器的配合。另一种选择是按响应类型过滤。在这两种情况下,您都需要某种类型的队列来完成承诺。尝试以一种不需要客户机和服务器之间紧密耦合的方式来完成承诺?听起来它需要大量的簿记,很多事情可能会出错。因此,您请求一个世界块,在某个时刻,服务器返回一个世界块,并由
world\u chunk\u处理器处理。最好是以幂等方式工作。我完全可以控制服务器。脱钩是没有必要的。我相信基于密钥的回调/承诺是这里最好的架构。谢谢你的帮助。