分散式roguelike的最佳IPC形式?

时间:2012-02-11 20:48:01

标签: client-server ipc roguelike

我有一个项目来创建一个,它以某种方式从引擎和引擎中抽取UI来自地图创建,站点线等。为了缩小焦点,我首先要只是让UI(玩家的客户端)和引擎工作。

我目前的想法是让客户端基本上是一个程序,决定一个角色(玩家,怪物)将轮到哪个角色,并等待它再次移动。所以每个怪物都有一个客户端,玩家也是如此。玩家的客户打印地图,等待输入,将其发送到引擎,并告诉玩家发生了什么。除了不打印地图和使用AI而不是键盘输入外,怪物的客户端也会这样做。

在我进一步发展之前,如果这似乎是一种混淆的做事方式,我的目标是学习,而不是写一个roguelike。这是journy,而不是目的地。

所以我需要选择最适合这种模式的形式。

  1. 我的第一次尝试使用管道,因为它们最简单,我写了一个 播放器的UI和用于管道的程序,例如 把地图和玩家放在哪里。虽然这有效,但它只允许 一个客户 - 通过stdin和out进行沟通。
  2. 我已经考虑过让引擎成为一个看起来像一个线轴的守护进程 客户端在启动时为每个客户端创建唯一的临时文件 给发动机说明并收到反馈。
  3. 最后,我用套接字做了一些介绍性的编程。 看起来他们似乎可以走了,并允许比赛 或许有一天会在网上跑。如果可能的话,我想使用 一个更简单的解决方案,因为我不熟悉它们,所以更多 容易出错。
  4. 我总是乐于接受建议。

1 个答案:

答案 0 :(得分:0)

我一直在使用这些组合来解决类似问题(多个客户端通过本地盒子上的单个守护进程进行通话,并将大部分智能推送到客户端)。

  • 用于共享大数据blob的mmap,包含用于通知的unix域套接字,消息队列或命名管道
  • 相同,但是每个blob使用单个文件而不是在mmap中将它们全部混合在一起
  • 相同,但没有文件或mmap(换句话说,更像是传统的消息传递)

总的来说,我喜欢用这种方式将事情分解成单独的可执行文件的想法 - 例如,它确实使测试变得更容易。我认为方法的选择归结为使用模式 - 消息有多大,它们中的数据需要多长时间,你能承受通过网络堆栈多次跳转基于套接字的消息的成本吗事情事实上,你坚持使用Linux可以使事情变得简单 - 例如,你不必担心消息队列的可移植性。

这个也适用:https://stackoverflow.com/a/1428542/1264797