一個別人的心得(轉發的)

轉發:http://blog.csdn.net/mayao11/article/details/7552384python


 

需求是:一種移動或web遊戲的服務器,要求是儘可能保證維護簡單,框架儘量簡潔,代碼量不宜過多;考慮1人非全職進行服務器維護,不該對運維形成太大難度。web

        首先,必須使用RakNet,可用的遊戲服務器框架很稀有,這是其中一個開源框架,底層提供完整的可靠UDP協議,上層有完整的封裝,不得不用。數據庫

        其次,客戶端採用C++、Lua編寫,其中邏輯部分徹底使用Lua編寫。服務器須要作一部分驗證工做,因此應當部分複用相關邏輯。編程

 

        技術試驗結論以下:服務器

        一、利用HTTP服務器創建遊戲服務器。很是簡單粗暴的思路,作起來很快,可是在HTTP服務裏服務器沒法主動發出請求,因此某些交互方面的需求幾乎不可實現。經討論放棄。框架

        二、RakNet徹底採用C++編寫,維護難度適中。RakNet的Patcher服務器官方建議採用PostgreSQL做爲數據庫,緣由是MySQL的部分功能支持不正常。好比截取數據庫裏超長字符串其中的一段會很是的慢。運維

        三、DB中間件(ORM),可選擇範圍:C++庫可選ODB,Python庫可選SQLAlchemy。ide

        四、接口生成器SWIG。用於將C++的庫(例如RakNet)所有半自動化註冊到其餘語言,經試驗難度適中,可行。尚存在問題:回調函數的註冊,遠程過程調用RPC的註冊尚未調查過。函數

        五、Python的使用方式有兩種:一是將C++的底層庫徹底註冊給Python使用,另外一種是讓C++調用Python模塊的接口。性能

        六、Lua的技術實現上預計不存在太大問題。服務器端邏輯相關代碼基本肯定採用Lua編寫。

        七、早上的新發現:Lua與Python混合編程:Lunatic Python。 Being two-way means that it allows Lua inside Python, Python inside Lua, Lua inside Python inside Lua, Python inside Lua inside Python, and so on. 霸氣側漏。不知道你敢不敢用,我反正敢用。另外有Lunatic Python的Lua-jit優化版本:lupa。網址分別爲:

        http://labix.org/lunatic-python

        http://pypi.python.org/pypi/lupa/0.9

        八、早上的新發現:Cython。支持用一種特製的語法編寫看起來是Python,實際是C的代碼,以後能夠將其編譯爲C語言級別的動態連接庫。在數學運算、函數調用方面極大下降開銷,加快速度。能夠用在項目中後期優化的時候。特此記錄。

 

        重要優缺點介紹:

        一、C++的ORM庫ODB據百度說是最佳選擇之一,但仔細研究了一成天幫助手冊和實際試驗,發現此庫要求用戶使用C++11的新特性,大量使用#pragma等編譯器特殊語法,Table的關聯是用多種不一樣類型的智能指針實現的。而且此庫底層提供了相似boost的改裝庫,提供了比boost更豐富的智能指針例如lazy_shared_ptr。這些高級功能必然會被使用到。(我很想說:這貨不是C++。)

            此外,因爲C++須要被編譯,因此ODB在使用時不是徹底自動化的,其使用分解爲兩大步:分析頭文件生成膠水層、而後編譯連接用戶代碼和膠水層。

        二、SQLAlchemy使用上很是簡單,能夠經過簡單設計實現數據庫初始化、操做一體化。且本人對Python的瞭解程度遠高於C++十一、boost等。其致命缺點在於一旦採用Python相關技術,勢必要在C++/Python接口上下不少功夫。

        三、SWIG的致命問題在於——移植庫的過程是一個考驗C++/其餘語言語法基本功的過程,很是有挑戰。實現難度:4星半,但能夠一試。

 

        計劃在上述條件下設計服務器框架,目前剩餘問題是C++如何用簡單的方式調用Python接口。預計今日(2012-5-10)晚得出結論。

 

——————————————————————————————————————————————————————

        結論:徹底使用 Python + Lua(Lunatic Python)編寫服務器

        其中,RakNet庫用SWIG將重要接口所有註冊給Python,直接用Python編寫高性能服務器!移植時有一些高級特性須要仔細看SWIG的在線文檔,已試驗經過。歡迎交流。

相關文章
相關標籤/搜索