2012-09-14 96 views
3

我正在设计一款游戏,但是这个问题适用于任何需要集群中的节点和主服务器之间进行双向通信的情况。我是很新的集群,但我积极计划在围棋和偶尔D.D或Go群集游戏服务器

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

  • 阵列片
  • 良好的并发支持
  • 跨平台&本地编译(多编译器实现)
  • GC(两个工作在精确GC)

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

在高层次上,我的比赛会做的大部分处理服务器端,与客户端只是从他们的角度呈现游戏状态。游戏旨在扩展,所以它需要在群集中进行操作。组件大部分是CPU绑定的,并且异步地更新到主服务器,这与客户端共享游戏状态。大多数计算取决于用户输入,因此这些事件需要发送到各个组件(因此是双向RPC)。

的原因,我喜欢d:

  • 手册内存管理
  • 模板/ CTFE
  • 代码的安全性(@safe,合同,输入/输出)

的原因,我喜欢去:

  • 标准库(pprofRPC
  • Go例程
  • go工具(特别是, go get -u安装/更新远程依赖项)

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

我倾向于D,因为手动内存管理被烘焙到语言中。虽然它没有RPC的漂亮库,但我理论上可以实现这一点,但我无法在Go中优雅地实现手动内存管理。

鉴于两种语言之间的选择,你会用哪种方法解决这个问题?

+1

真的没关系。选择一个你更喜欢的,并开始编码! –

+1

@BrendanLong - 这是问题的一部分,我喜欢他们两个!我只是寻找一些指导,以这种或那种方式推动我,最好来自具有集群/游戏设计经验的人。 – tjameson

+1

尽管这个问题并没有真正的建设性(通过本网站的定义),但它的制定很好,可以看出作者花费了大量的精力来研究这个领域,所以它很值得阅读。荣誉。 – kostix

回答

5

我希望,要么将工作和很多这取决于你更喜欢哪个,但如果你正在做的客户端d,我建议做在d服务器只是因为当时有参与较少的语言。如果你使用两种语言,那么任何在你的项目上工作的人通常都必须知道他们两个,并且Go和D在他们的用户基础上足够小,以至于几乎没有人会知道这两种语言 - 尽管如果这只是你的工作它,你显然已经知道他们两人了。

但是,我会指出,如果使用D的问题是缺少RPC库,那么这不是问题,因为D由Apache Thrift支持。因此,D does有一个稳固的RPC库,即使它不在其标准库中(事实上,这是D第一轮参与Google的Summer of Code的成果之一)。

+0

是的,我看到了Thrift,但我不知道它是否跨网络工作(它看起来像顶级语言之间的粘连)。我认为这可能会回答我的问题。 – tjameson

0

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

我在Go开发了通信服务器,实现与PUSH技术的通信。 Go非常擅长这样的任务。简洁易懂的简洁代码。

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

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

因此,没有全局GC锁的手动内存管理对客户端应用程序更好。