站务联系

使用 Go 语言开发大型 MMORPG 游戏服务器怎么样?

发布时间:2021-03-11   来源:网络整理    
字号:

从2013年起,经同学推荐开始用Golang撰写游戏登录服务器, 配合C++做第三方平台验证. 到撰写独立工具导表工具GitHub - davyxu/tabtoy: 跨平台的高性能方便电子表格导入器. 以及网路库GitHub - davyxu/cellnet: 简单,方便,高效的Go语言的游戏服务器底层. 最终使用这种工具及库撰写整个游戏服务器框架, 我的体验是很不错的

细节看来, 有如下的几个点:

语言, 库

Golang语言特征跟C太象, 简单, 一张A4纸能够读完所有特点. 你想想看, C++至了感悟阶段, 也只用那几个简略特征, 剩下的都是一大堆解决各式显存问题的方法. 而Golang一开始就简略, 何必耗费生命去研究那一大堆的奇技淫巧呢?

Golang的坑只有2个:1. interface{}和nil配合使用, 2. for循环时, 将循环变量引进闭包(Golang, Lua, C#闭包变量捕捉差别) 完全不影响正常使用, 复合语言概念, 只是看官方上面如何有效的防止

用Golang就忘掉承继那套东西, 用组合+接口

用Golang服务器怎样保证解决游戏服务器存档一致性问题? stop the world是肯定的, 但是Golang可以从语言层并发序列化玩家数据, 再通过后台存档

channel是goroutine其实是Golang的语言特点. 但是在撰写服务器时, 其实只有底层用的比较多.

Golang的第三方库简直多如牛毛, 好的也太多

不要说模版了, C#的也不好用, 官方在苦恼也不要加, 使用中, 没模版确实有点不便于. 用interface{}/反射做数组对于Golang这些强类别语言来说,还是有点群嘲

运行期

Golang跟C++比功耗的话, 这是C++的优势, Golang由于没虚拟机, 只有薄薄的一层调度层. 因此功耗是特别高的, 用一点功耗牺牲换开发效率, 妥妥的

1.6版后的GC优化的早已挺好了, 如果你不是高性能,高并发Web应用, 非要找出一堆的优化方法的话. 只用Golang写点游戏服务器, 那点GC耗损可以忽视不计

和其他现代语言一样, 崩溃捕获是标配功能, 我用Golang的服务器线上跑, 基本没遇到过崩溃状况

热更新: 官方早已有plugin系统的递交, 跨平台的. 估计很快就可以挥别手动cgo做so热更新

开发, 调试, 部署, 优化

LiteIDE是我首选的Golang的IDE, 虽然有童鞋说B格不高. 但这恐怕实在是找不到劣势说了, 别和我说Visual Studio, 那是宇宙级的...

曾经据说有人不看好Golang, 我问为什么: 说这样新的语言, 不好招人,后面打看到他是个企划... 好吧

真实状况是这么的: Golang对于有点编程基础的新人来说, 1周左右可以开始贡献代码. 老的哥2~3天.

开发效率还是不错的, 通常大的游戏功能, 2*2人一周3~4个整完. 这换C++时代, 大概也就1~2个还写不完. 对接服务器sdk的话, 大概1天接个10多个没问题

Golang自带功耗调优工具, 从显存, CPU, 阻塞点等几个方面直接出图进行剖析, 非常直观, 可以参考我博客几年前的剖析: 使用Golang进行功耗剖析(Profiling)

Golang支持交叉编译, 跨平台布署, 什么概念? linux是吧? 不问你哪些版本, 直接windows上编译输出一个elf, 甩至服务器上开跑.不超过1分钟时间..

现在北上广深蓉这些新开项目都选择了Golang游戏服务器游戏服务器,就是见到Golang的开发效率跟招人里面

对于Golang开发也有苦恼可以看下我的博文:服务器开发语言比较

打个广告, 各种开发笔记, 参考 战魂小筑 - C++博客

开源服务器网路库, /davyxu/cellnet 欢迎赏星

多个商用项目使用的 GitHub - davyxu/tabtoy: 跨平台的高性能方便电子表格导出器

图说天下

×
二维码生成