我正在构建一个显示墙演示应用程序。
环境:
- N 台机器,每台最多可驱动六台显示器
- 有线千兆交换机
- OpenTK 应用程序绘制漂亮的图片,在每个节点上运行 1 个副本
每个节点运行演示可执行文件的相同副本。每个节点还具有一些配置数据,其中包含整面墙的分辨率以及该节点在该空间内的显示的相对位置。渲染时,在投影矩阵之后应用缩放/平移变换(有效放大节点负责渲染的视图部分。
节点在启动脚本中设置了一个“模式”开关,将它们置于“发送”或“接收”模式。除一个节点外,所有节点都处于“接收”状态。(将一个节点切换到“发送”会导致所有其他节点切换到“接收”)。
演示应用程序是一些基本几何体(网格、二十面体等)的基本 FPS 类型飞行。在每次更新时,发送方节点都会广播一个包含一些状态信息(摄像机平移/旋转、移动对象的变换)的 UDP 数据报。
侦听器异步接收这些数据报,反序列化状态并更新其本地副本。
最终效果是我在笔记本电脑上运行该应用程序并飞来飞去,墙壁很好地跟随。这一切都很好。
但是,我担心随着系统的扩展(从 10 台显示器到 500 台显示器),网络延迟将成为一个问题。我还认为,与其通过这种方式在网络上发送垃圾邮件状态,不如将其填充到数据库中并让每个节点从那里拉出,但我怀疑任何现成的数据库都将达到一个 60FPS * 500 个节点的循环。
建议?在很多节点之间真正非常快速地共享状态的最佳方式是什么?