在呈现集群中的节点之间同步视图状态
本文关键字:节点 之间 同步 视图状态 | 更新日期: 2023-09-27 18:01:33
我正在构建一个显示墙演示应用程序。
环境:
- N台机器,每台驱动多达6个显示器
- 有线千兆交换机
- OpenTK应用程序绘制漂亮的图片,在每个节点上运行1个副本
每个节点运行演示可执行文件的相同副本。每个节点还有一些配置数据,其中包含整个墙的分辨率以及该节点在该空间内显示的相对位置。渲染时,在投影矩阵之后应用缩放/平移变换(有效地放大节点负责渲染的视图部分)。
节点在启动脚本中设置了"模式"开关,使其处于"发送"或"接收"模式。除一个节点外,所有节点都处于"接收"状态。(将一个节点切换到"发送"会导致所有其他节点切换到"接收")。
演示应用程序是一些原始几何(网格,二十面体等)的基本fps类型飞越。在每次更新中,发送方节点广播一个UDP数据报,其中包含一些状态信息(摄像机平移/旋转,移动对象的变换)。
监听器异步接收这些数据报,反序列化状态并更新它们的本地副本。
最终效果是,我在笔记本电脑上运行应用程序,到处飞,墙壁也跟着飞。这一切都运行得很好。
然而,我担心随着系统的扩展(从10个显示器到500个),网络延迟将成为一个问题。我还认为,与其以这种方式在网络上发送垃圾状态,不如把它塞进数据库,让每个节点都从那里拉出来,但我怀疑任何现成的数据库都能达到60FPS * 500个节点的周期。
建议吗?在大量节点之间快速共享状态的最佳方式是什么?
我在gamedev.stackexchange.com上收到了相当完整的回复。有兴趣人士可在此浏览