以下比較的基礎(chǔ)都是基于一種編程語言+一定的第三方或者自己編寫的網(wǎng)絡(luò)庫和底層進(jìn)行的,Skynet稍微特殊,但總體比較合適放到比較中來
C#
開發(fā)效率:Windows下可以通過VisualStudio進(jìn)行開發(fā),其他平臺可以使用MonoDevelop,非常方便
運(yùn)行效率:JIT的性能優(yōu)化比較到位,能適應(yīng)90%性能環(huán)境
部署便捷性:可以通過交叉編譯生成其他平臺的可執(zhí)行文件,通過mono運(yùn)行可執(zhí)行文件
調(diào)試便捷性:VisualStudio和MonoDevelop調(diào)試均很方便, 還可遠(yuǎn)程調(diào)試
上手度:對C系語言熟悉的幾天就可上手
熱更新:可以通過DLL方式進(jìn)行
Web對接:可做,代碼比較啰嗦
崩潰處理:可通過try catch捕獲錯誤
網(wǎng)絡(luò)庫編寫難度:一般,需注意gc問題
第三方網(wǎng)絡(luò)庫及框架數(shù)量:一般
Golang
開發(fā)效率:高
運(yùn)行效率:并發(fā)上非常有優(yōu)勢,對CPU利用率比較高,原生運(yùn)行無虛擬機(jī)
部署便捷性:一次編譯到處運(yùn)行,無任何運(yùn)行庫依賴
調(diào)試便捷性:實(shí)際操作中,單線程掛接調(diào)試器可行, 但變量顯示不正確,開發(fā)期基本采用日志方式進(jìn)行查錯
上手度:語言簡單,特性少, 新手1周能貢獻(xiàn)代碼
熱更新:無法進(jìn)行熱更新,語言無法編譯為DLL,也不支持DLL加載(linux平臺的.so加載忽略不計)
Web對接:非常方便, 代碼精簡
崩潰處理:崩潰后以命令行方式打印出棧,程序內(nèi)可以捕獲任何崩潰錯誤并繼續(xù)運(yùn)行
網(wǎng)絡(luò)庫編寫難度:簡單,比C socket更簡單
第三方網(wǎng)絡(luò)庫及框架數(shù)量:偏少
Skynet(lua+C)
開發(fā)效率:基于動態(tài)語言的開發(fā)初次寫比較快,后期維護(hù)和重構(gòu)會耗費(fèi)一定的時間在查錯上
運(yùn)行效率:基于lua jit的運(yùn)行效率還是能接受的
部署便捷性:方便, 只有底層修改需要重新編譯, 大部分時間只用更新lua文件
調(diào)試便捷性:不是很方便,基于日志方式進(jìn)行查錯
上手度:lua語言特性有部分和C系語言有一定差異,基于Actor模型的思想學(xué)習(xí),適應(yīng)需要耗費(fèi)一定的時間
熱更新:類似于Erlang,可精確到函數(shù)級的熱更新
Web對接:有一些http支持,通過社區(qū)慢慢進(jìn)行完善
崩潰處理:lua天生可以捕獲錯誤
網(wǎng)絡(luò)庫編寫難度:自帶,無需編寫
第三方網(wǎng)絡(luò)庫及框架數(shù)量:通過社區(qū)慢慢完善
C++
開發(fā)效率:編譯慢,文件多,通用庫少
運(yùn)行效率:native速度標(biāo)桿
部署便捷性:編寫各類的make門檻較高
調(diào)試便捷性:可通過VisualStudio進(jìn)行Windows平臺調(diào)試
上手度:2~3年經(jīng)驗的熟手仍然會寫出崩潰和泄露代碼
熱更新:可通過DLL進(jìn)行
Web對接:代碼啰嗦,第三方庫少
崩潰處理:Windows下可使用SEH捕獲段異常,其他平臺只能通過崩潰后進(jìn)行coredump分析,容錯非常差
網(wǎng)絡(luò)庫編寫難度:基于asio編寫較為簡單,但總體看來難度不低
第三方網(wǎng)絡(luò)庫及框架數(shù)量:較多
以下是得分
從發(fā)文時的項目對這些語言使用率來說,Java,Erlang,C++編寫的服務(wù)器較多,Golang,JavaScript,C#是第二梯隊,Skynet由于上手不是很容易,所以僅有兩位數(shù)的團(tuán)隊在使用,但總體表現(xiàn)還是比較出色的
對于老團(tuán)隊, C++的服務(wù)器工具鏈和框架已經(jīng)相對成熟, 完全沒必要更換新語言, 只是在對接sdk感覺困難時,可以嘗試Golang這些對web有優(yōu)勢的語言進(jìn)行混合語言開發(fā)
對于新團(tuán)隊,開發(fā)效率,上手度和部署效率是優(yōu)先選擇的,C#,Golang,JavaScript這些新興語言會讓你事半功倍
對于大規(guī)模無需選服的服務(wù)器, Skynet的actor模型對擴(kuò)展會比較容易
對于大公司,好項目,上線后需要通過熱更新進(jìn)行bug修補(bǔ)的,C#,C++,Erlang會是首選
但總的一點(diǎn), 還是根據(jù)團(tuán)隊熟悉度來選擇語言,貿(mào)然的使用新語言的風(fēng)險也是很大的