標籤:for 調試 試算表 ++ 解決 rap 虛擬機器 span 研究
使用 Go 語言開發大型 MMORPG 遊戲伺服器怎麼樣?
和C Socket伺服器比起來有什麼優劣?可行性怎麼樣?
從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++部落格
開原始伺服器網路程式庫, https://github.com/davyxu/cellnet 歡迎賞星
多個商用項目使用的 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
來源:知乎
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。
使用 Go 語言開發大型 MMORPG 遊戲伺服器怎麼樣?(非常穩定、捕獲所有異常、非常適合從頭開始,但大公司已經有現成的C++架構、所以不會使用)