我正在设计一个游戏,但是这个问题适用于集群中的节点和主服务器之间需要双向通信的任何情况。我对集群非常陌生,但我积极参与围棋,偶尔也会在D。
我非常想使用现代语言(不是C/C++),所以我选择这两种语言是因为:
我读过https://stackoverflow.com/questions/3554956/d-versus-go-comparison和游戏开发的D语言。
在较高的级别上,我的游戏将完成大部分处理服务器端,客户端只从他们的角度呈现游戏状态。这款游戏的设计是为了扩大规模,所以它需要在一个集群中发挥作用。组件主要是CPU绑定,并异步更新到主服务器,与客户端共享游戏状态。大多数计算取决于用户输入,因此这些事件需要发送到各个组件(因此是双向RPC)。
我喜欢D的原因:
我喜欢去的原因:
go工具(尤指)安装/更新远程依赖项的go get -u )客户机可能是用D编写的,但这不应该对服务器产生影响。
我倾向于D,因为手动内存管理是在语言中进行的。虽然它没有很好的RPC库,但理论上我可以实现它,但我不能在Go中优雅地实现手动内存管理。
考虑到这两种语言之间的选择,你会用哪种语言来解决这个问题?
发布于 2012-09-14 21:33:04
我希望这两种方法都能工作,而且这在很大程度上取决于您喜欢哪种语言,尽管如果您在D中执行客户端,我建议您使用D来做服务器,因为所涉及的语言较少。如果你使用两种语言,那么任何在你的项目中工作的人都必须同时知道这两种语言,而且在这一点上,Go和D都足够小,以至于很少有人会同时知道这两种语言--尽管如果只是你在做这两种语言,你显然已经知道了。
但是,我要指出,如果使用D的问题是缺乏RPC库,那么这不是问题,因为D是由阿帕奇支持的。因此,D确实有一个坚实的RPC库,即使它不在标准库中(实际上,它是D第一轮参与Google夏季代码的成果之一)。
发布于 2012-09-14 23:59:24
我对你的游戏一无所知,如果好的并发性对你的服务器很重要,那么我就投票给你。
我在Go中开发了通信服务器,用PUSH技术实现了通信。对于这样的任务来说,围棋是很棒的。简洁干净的代码,易于理解。
在并发应用程序中,自动内存非常重要。
客户端应用程序不像服务器应用程序那样并发。客户端应用程序应该保持高帧速率。
因此,没有全局GC锁的手动内存管理更适合客户端应用程序。
https://stackoverflow.com/questions/12431451
复制相似问题