使用 Go 語言開發大型 MMORPG 遊戲服務器怎麼樣?(很是穩定、捕獲全部異常、很是適合從頭開始,但大公司已經有現成的C++框架、因此不會使用)

使用 Go 語言開發大型 MMORPG 遊戲服務器怎麼樣?
和C Socket服務器比起來有什麼優劣?可行性怎麼樣?html


從2013年起,經朋友推薦開始用Golang編寫遊戲登錄服務器, 配合C++作第三方平臺驗證. 到編寫獨立工具導表工具GitHub - davyxu/tabtoy: 跨平臺的高性能便捷電子表格導出器. 以及網絡庫GitHub - davyxu/cellnet: 簡單,方便,高效的Go語言的遊戲服務器底層. 最終使用這些工具及庫編寫整個遊戲服務器框架, 個人感覺是很不錯的linux

細節看來, 有以下的幾個點:c++

語言, 庫
Golang語言特性和C很像, 簡單, 一張A4紙就能寫完全部特性. 你想一想看, C++到了領悟階段, 也只用那幾個簡單特性, 剩下的都是一大堆解決各類內存問題的技巧. 而Golang一開始就簡單, 何須浪費生命去研究那一大堆的奇技淫巧呢?git

Golang的坑只有2個:1. interface{}和nil配合使用, 2. for循環時, 將循環變量引入閉包(Golang, Lua, C#閉包變量捕獲差別) 徹底不影響正常使用, 複合語言概念, 只是看官方後面怎麼有效的避免github

用Golang就忘記繼承那套東西, 用組合+接口golang

用Golang服務器如何保證解決遊戲服務器存盤一致性問題? stop the world是確定的, 可是Golang能夠從語言層併發序列化玩家數據, 再經過後臺存盤編程

channel是goroutine雖然是Golang的語言特性. 可是在編寫服務器時, 其實只有底層用的比較多.windows

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++博客

開源服務器網絡庫, 歡迎賞星

多個商用項目使用的 GitHub - davyxu/tabtoy: 跨平臺的高性能便捷電子表格導出器
 
做者:徐波
連接:https://www.zhihu.com/question/21098952/answer/47703631
來源:知乎
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。
 
 

大型 MMORPG 遊戲服務端,估計之後都很難看到golang的「成功案例」。障礙不在於GC這些,而在於如今大型 MMORPG 只有大公司能搞得動。而大公司通常都已經有大牛,已經有積累了n年的服務端c/c++框架。

如過真的有新進入者,須要從頭開發服務端框架,那用go幾乎是最佳選擇。

對頁遊/手游來講,go能夠說是天地廣闊,大有可爲。一個用C++半年抄出一個遊戲且時不時會宕機再加3個月才能搞穩定的團隊 VS 一個用go三個月抄出一個遊戲且從不宕機的團隊,嘿嘿......
做者:應跨江 連接:https://www.zhihu.com/question/21098952/answer/21075482 來源:知乎 著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。
相關文章
相關標籤/搜索