分布式網游server的一些想法(一) 語言和平台的選擇


國內網游已經發展了很多年了,開發語言的選擇也逐步發生了變化,C 到 C++ 到 C++ + PYTHON 或者C++ + LUA 到現在 很多公司開始使用erlang,java,c#。目前是一個百花齊放的局面。

但是如果是要你重新做一個網游server,不考慮對公司或者已有的東西兼容性,你會怎么選擇?我仔細想了一下這個問題,大概有這個幾個方面需要考慮:

1. 語言類庫是否齊全。

    如果用C++ 或者C來搞,我想很多東西得自己重新編寫,寫出來的東西還未必正確。費時費力費錢。另外一些游戲server不可缺少的功能例如ORM,用C基本上沒法去做

 

2. 語言的開發效率

    一個好的IDE可以極大的提高開發效率,C# VS Java eclipse都很不錯,python, lua, erlang IDE支持就很弱了,C&C++編譯速度太慢導致開發速度明顯不如其它語言

 

3. 語言是否容易上手,人員是否好招。

    C++對開發人員要求極高,人不好招,價錢還貴,用erlang,python,lua的人實在太少

 

4. 語言的容錯性是否較好。

    C&C++很難避免coredump,server一旦掛掉,用戶體驗會明顯下降,損失的可是錢啊。另外C C++較難熱更新,這點python lua C# erlang都能比較容易做到,出了些小bug可以不重啟服務器就能更新邏輯,對分布式網游服務器來說至關重要

 

5. 語言是否有良好的異步語法支持

    分布式服務器架構,server與server之間必然會有大量交互。由於游戲邏輯很難拆分成多線程,所以一般來說都是邏輯單線程+異步遠程調用,所以,語言的異步語法支持不可或缺。

C語言異步支持十分差,很難做,C++有lambda std::bind std::function有限支持,仍然難以寫大量異步邏輯,而且C++回調的方式會將邏輯撕扯的支離破碎。python和lua都有類似協程支持。C#有async await支持,C#還有WCF框架支持,遠程調用就像本地調用一樣。java異步也比較難寫。erlang天生就是分布式語言。

 

6. 服務器選擇windows linux

    linux免費,windows需要購買,linux維護人員難找,價格高,windows維護人員比較好找,價格稍微便宜。會linux開發的人比較難找,價格高,會windows開發的到處都是。

C# 如果要使用WCF那就只能在windows上開發了,如果不用wcf那么 linux上mono也可以跑C#

其實window server和visual studio授權比起開發人員的薪水來說還是比較少的,假如你的游戲火起來需要大量windows server,估計你也不會在意這些錢了

 

7. 動態語言或是靜態語言

    C&C++ C# JAVA是靜態語言,python lua是動態語言,靜態語言編譯時能發現絕大部分問題,而動態語言需要運行到那一步才能發現bug。靜態語言需要編譯,C&C++編譯速度實在讓人難以忍受,java和C#還好,動態語言不需要編譯。python lua另外一個優勢在於可以熱更新,這點C#也可以做到。

 

8. 語言的性能

    python性能比較差,不過,對於分布式server來說,語言的性能可能不是那么重要了,一個進程支撐1000人就足夠了,基本上都能滿足

 

所以綜上來說,我會選擇windows平台C#。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM