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