【问题标题】:D or Go for clustered game server [closed]集群游戏服务器的 D 或 Go [关闭]
【发布时间】:2012-09-08 00:40:08
【问题描述】:

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

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

  • 数组切片
  • 良好的并发支持
  • 跨平台和本地编译(具有多个编译器实现)
  • GC(两者都在进行精确的 GC)

我读过https://stackoverflow.com/questions/3554956/d-versus-go-comparisonThe D Programming Language for Game Development

概括地说,我的游戏将在服务器端进行大部分处理,而客户端只是从他们的角度呈现游戏状态。该游戏旨在扩展,因此需要在集群中运行。组件主要受 CPU 限制,并异步更新到主服务器,与客户端共享游戏状态。大多数计算依赖于用户输入,因此这些事件需要向下发送到各个组件(因此是双向 RPC)。

我喜欢 D 的原因:

  • 手动内存管理
  • 模板/CTFE
  • 代码安全(@safe、contracts、in/out)

我喜欢 Go 的原因:

  • 标准库(pprofRPC
  • Go 例程
  • go 工具(尤其是go get -u 用于安装/更新远程依赖项)

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

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

如果要在两种语言之间进行选择,您会使用哪一种来解决这个问题?

【问题讨论】:

  • 真的没关系。选择你更喜欢的并开始编码!
  • @BrendanLong - 这是问题的一部分,我两个都喜欢!我只是在寻找一些指导,以某种方式推动我,最好是从具有集群/游戏设计经验的人那里获得。
  • 尽管这个问题并不具有建设性(根据本网站的定义),但它的表述很好,可以看出作者为研究该领域付出了相当大的努力,因此阅读起来很愉快。对此表示敬意。

标签: go d rpc


【解决方案1】:

我希望这两种方法都能奏效,而且很大程度上取决于您喜欢哪一种,但如果您在 D 中做客户端,我建议您在 D 中做服务器,因为这样涉及的语言较少。如果您使用两种语言,那么从事您项目的任何人通常都必须同时了解它们,而 Go 和 D 的用户群目前都足够小,几乎没有人会同时知道这两种语言——尽管如果只有您在工作它,你显然已经知道他们两个了。

但是,我要指出,如果使用 D 的问题是缺少 RPC 库,那么这不是问题,因为 Apache Thrift 支持 D。所以,D 确实有一个可靠的 RPC 库,即使它不在其标准库中(事实上,这是 D 第一轮参与 Google 代码之夏的成果之一)。 p>

【讨论】:

  • 是的,我看到了 Thrift,但我不知道它是否可以跨网络工作(它看起来像是顶级语言之间的粘合剂)。我想这可能会回答我的问题。
【解决方案2】:

我对你的游戏一无所知,如果你的服务器的良好并发性很重要,那么我投票给 Go。

我在 Go 中开发了通信服务器,使用 PUSH 技术实现通信。 Go 非常适合此类任务。简洁简洁的代码,易于理解。

自动内存在并发应用程序中很重要。

客户端应用不像服务器应用那样并发。 客户端应用程序应保持恒定的高帧速率。

因此,没有全局 GC 锁的手动内存管理更适合客户端应用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    • 2017-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-19
    • 1970-01-01
    相关资源
    最近更新 更多