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