D或Go用于集群游戏服务器

bea*_*mit 3 rpc d go

我正在设计一个游戏,但这个问题适用于需要群集中的节点和主服务器之间的双向通信的任何情况.我对集群很陌生,但我积极参与Go计划,偶尔在D计划.

我真的想使用现代语言(而不是C/C++),所以我选择了这两种语言,因为:

  • 数组切片
  • 良好的并发支持
  • 跨平台和本地编译(具有多个编译器实现)
  • GC(均在精确GC上工作)

我已经阅读了/sf/ask/248846951/用于游戏开发的D编程语言.

在高级别,我的游戏将完成大部分处理服务器端,客户端只是从他们的角度呈现游戏状态.游戏旨在扩展,因此它需要在群集中运行.组件主要是CPU绑定的,并且异步更新到主服务器,它与客户端共享游戏状态.大多数计算取决于用户输入,因此需要将这些事件发送到单个组件(因此是双向RPC).

我喜欢D的原因:

  • 手动内存管理
  • 模板/ CTFE
  • 代码安全(@safe,合同,进/出)

我喜欢Go的原因:

  • 标准库(pprof,RPC)
  • 去常规
  • go工具(尤其go get -u是安装/更新远程依赖项)

客户端可能会用D编写,但这不应该对服务器产生影响.

我倾向于D,因为手动内存管理已融入语言.虽然它没有很好的RPC库,但我理论上可以实现它,但我不能优雅地在Go中实现手动内存管理.

鉴于两种语言之间的选择,您会针对此问题使用哪种方法?

Jon*_*vis 5

我希望其中任何一个都可以工作,而且很多都取决于你喜欢哪个,不过如果你在D中做客户端,我建议在D中使用服务器,因为那时涉及的语言较少.如果您使用两种语言,那么从事您的项目的任何人通常都必须了解他们两者,并且Go和D在他们的用户群方面都足够小,以至于很少有人会知道这两者 - 尽管这只是你在做什么它,你显然已经知道了它们.

不过,我想指出,如果用d的问题是缺乏一个RPC库,那么这不是一个问题,因为d是支持的Apache节俭.因此,D 确实有一个可靠的RPC库,即使它不在其标准库中(事实上,它是D的第一轮参与Google的Summer of Code的成果之一).