我正在设计一个游戏,但是这个问题适用于任何需要集群中的节点和主服务器之间双向通信的情况。我对集群很陌生,但我积极地用 Go 编程,偶尔用 D 编程。
我真的很想使用现代语言(不是 C/C++),所以我选择了这两种语言,因为:
- 数组切片
- 良好的并发支持
- 跨平台和本地编译(具有多个编译器实现)
- GC(都在精确的 GC 上工作)
我已阅读https://stackoverflow.com/questions/3554956/d-versus-go-comparison和 The D Programming Language for Game Development。
在高层次上,我的游戏将完成服务器端的大部分处理,而客户端只是从他们的角度呈现游戏状态。该游戏旨在扩展,因此需要在集群中运行。组件主要受 CPU 限制,并异步更新到主服务器,与客户端共享游戏状态。大多数计算依赖于用户输入,因此这些事件需要向下发送到各个组件(因此是双向 RPC)。
我喜欢D的原因:
- 手动内存管理
- 模板/CTFE
- 代码安全(@safe、合同、输入/输出)
我喜欢 Go 的原因:
客户端可能会用 D 编写,但这不应该对服务器产生影响。
我倾向于 D,因为手动内存管理已融入该语言。虽然它没有很好的 RPC 库,但理论上我可以实现它,但我不能优雅地在 Go 中实现手动内存管理。
考虑到在两种语言之间的选择,你会用哪一种来解决这个问题?