亚洲国产AV一区二区三区久久_乱人妻中文字幕视频_91麻豆精品国产一级_精品国产欧美另类一区

您的當前位置: 首頁>>常德新聞中心>>服務(wù)器資訊

如何搭建手游的服務(wù)器

瀏覽量(87189) 時間:2020-09-09

1.開發(fā)語言的選擇:


工欲善其事,必先利其器,選擇一門適合的開發(fā)語法對后期開發(fā)有著事半功倍的作用。


業(yè)界主要的是c/c++ + Python/lua模式做游戲常德服務(wù)器。c/c++做網(wǎng)絡(luò)通訊數(shù)據(jù)傳輸,python/lua做業(yè)務(wù)邏輯。這樣既保持了網(wǎng)絡(luò)傳輸?shù)男?c++),又提升開發(fā)效率(Python/lua),同時也支持熱更新。


當然,也有其他常德服務(wù)器開發(fā)語言,erlang(沒用過,頁游公司用的多),c#(大棒子國喜歡用,神奇的民族),Java(第一次聽說時我驚呆了),node.js(少量游戲用的,還有一個node.js寫的引擎叫pemolo),php(做http協(xié)議通訊的游戲時php+mysql也不失為一種好選擇),看過兩個游戲常德服務(wù)器引擎 :


1.firefly(9秒社團開發(fā)的一款python游戲服務(wù)器框架)


2.kbengine(作者說他按bigworld的架構(gòu)來設(shè)計的,c++ + python的) 


2.數(shù)據(jù)庫 現(xiàn)在比較流行的兩種數(shù)據(jù)庫,關(guān)系型數(shù)據(jù)庫mysql和非關(guān)系型數(shù)據(jù)庫mongodb。這是我用的最多的兩個數(shù)據(jù)庫。


關(guān)于兩者之間的各種比較,網(wǎng)上有很多,當然你也可以用其他數(shù)據(jù)庫,至于sql server,不怕被坑你就用吧(我向來對微軟的東西沒好感)。3.服務(wù)端架構(gòu) 講一下我用過的其中一種架構(gòu)模型,也是公司按著bigworld架構(gòu)設(shè)計的: 1.Gate:首先要有一個Gate(網(wǎng)關(guān))服務(wù)器,負責客戶端連接及消息轉(zhuǎn)發(fā)到Game(游戲服),保持客戶端到服務(wù)端的連接,沒有任何邏輯,只做消息加密和解密,以及客戶端和服務(wù)器消息的轉(zhuǎn)發(fā)(相當于兩者之間的橋梁). 2.GameServer:GameServer是游戲進程,提供游戲邏輯功能(采用單進程(或者單線程)模型,游戲服務(wù)器的瓶頸從來不在CPU,所以只做邏輯功能的話單線程足夠了,在這里沒必要用多線程或多進程)。 3.DBManager:實現(xiàn)數(shù)據(jù)庫的讀寫,方便Game服務(wù)器異步讀寫數(shù)據(jù)庫的數(shù)據(jù)(有些把數(shù)據(jù)庫讀寫放在游戲服,沒有單獨的服務(wù)器,那恐怕游戲服單進程就不夠用了)。 3.GameManager:負責管理所有的GameServer,GameServer之間消息轉(zhuǎn)發(fā),提供廣播到所有Game的功能。 4.協(xié)議 客戶端與服務(wù)器之間協(xié)議通信,可以用tcp或者http。主要看游戲模型,如果是那種弱聯(lián)網(wǎng)單機玩法,用http足夠了,像天天酷跑之類,只在需要的時候處理一條http請求響應(yīng)。


不過tcp用的比較還是比較多的?,F(xiàn)在的網(wǎng)絡(luò)游戲大多數(shù)都是tcp,像MMORPG類游戲。我們現(xiàn)在的游戲就是同時用了http和tcp,客戶端和游戲服采用http協(xié)議。只有多人戰(zhàn)斗轉(zhuǎn)向戰(zhàn)斗服才采用tcp長鏈接。


udp:其實游戲是有udp的,在一些高效率的場景下比如pvp即時戰(zhàn)斗,tcp的擁塞控制和超時重傳并不適合,有些就用的udp,然后自己做丟包重發(fā),拿網(wǎng)絡(luò)公平性換游戲局部的效率。


現(xiàn)在參與開發(fā)的游戲就同時使用了http協(xié)議和tcp協(xié)議,在游戲服是單機玩法用http協(xié)議,戰(zhàn)斗服需要長連接保存協(xié)議狀態(tài),用的tcp。


5.存盤


有數(shù)據(jù)庫就肯定有數(shù)據(jù)庫讀寫操作,最主要的還是存盤(save),周期存盤還是即時存盤


即時存盤就是每一次操作數(shù)據(jù)都進行存到數(shù)據(jù)庫,當然這樣會導致對數(shù)據(jù)庫的操作過于頻繁,畢竟這是效率的瓶頸之一。


周期存盤也叫固定存盤,就是每隔固定時間存盤一次,比如10秒或者15秒,這樣數(shù)據(jù)庫的壓力就會小很多,當然自己就要在內(nèi)存中做好數(shù)據(jù)操作,防止數(shù)據(jù)污染或者存盤不上導致回檔。


二.開發(fā)一個游戲服務(wù)器需要掌握的開源技術(shù)


1.libevent,boost.asio等網(wǎng)絡(luò)庫,網(wǎng)上有很多開源網(wǎng)絡(luò)庫,與其自己造輪子,不如就用開源網(wǎng)絡(luò)庫作為自己服務(wù)器的通訊庫。最出名的就屬libevent和boost.asio了。 Boost的ASIO是一個異步IO庫,封裝了對Socket的常用操作,簡化了基于socket程序的開發(fā)。支持跨平臺。 libevent是一個C語言寫的事件驅(qū)動的開源網(wǎng)絡(luò)庫,具體見:http://blog.csdn.net/majianfei1023/article/details/46485705


至于二者之間的效率,仁者見仁。當然還有很多:比如云風寫的skynet(c + lua),陳碩寫的muduo(c++)。都寫得很好,云風寫的東西簡單好用,陳碩在秀他的c++技術(shù)。


2.protobuf:全稱Google Protocol Buffers,是google開發(fā)的的一套用于數(shù)據(jù)存儲,網(wǎng)絡(luò)通信時用于協(xié)議編解碼的工具庫。它和XML或者JSON差不多,也就是把某種數(shù)據(jù)結(jié)構(gòu)的信息,以某種格式(XML,JSON)保存起來, protobuf與XML和JSON不同在于,protobuf是基于二進制的。主要用于數(shù)據(jù)存儲、傳輸協(xié)議格式等場合。具體見:http://blog.csdn.net/majianfei1023/article/details/45112415。


protobuf他的優(yōu)勢是對于傳輸比較大的數(shù)據(jù)產(chǎn)生的數(shù)據(jù)很緊湊很小,可以明顯減小傳輸量。而且處理速度也比較快,又有各種編程語言的實現(xiàn),例如C++,Java,PHP等等。缺點是不能明文編輯(數(shù)據(jù)是二進制的)。用protobuf rpc進行數(shù)據(jù)傳輸很方便,所以是一個不錯的選擇。google protobuf只負責消息的打包和解包,并不包含RPC的實現(xiàn),所以需要自己實現(xiàn)。


3.zeromq:消息隊列,一個穩(wěn)健,簡潔的多進程通訊方案的基礎(chǔ)。ZeroMQ 并不是一個對socket的封裝,不能用它去實現(xiàn)已有的網(wǎng)絡(luò)協(xié)議。它有自己的模式,不同于更底層的點對點通訊模式。它有比 tcp 協(xié)議更高一級的協(xié)議。(當然 ZeroMQ 不一定基于 TCP 協(xié)議,它也可以用于進程間和進程內(nèi)通訊。)它改變了通訊都基于一對一的連接這個假設(shè)。 在這里它更適合服務(wù)器與服務(wù)器之間的通信,比如邏輯服和戰(zhàn)斗服之間進行通信。


4.memcached:一個高性能的分布式內(nèi)存對象緩存系統(tǒng),用于動態(tài)Web應(yīng)用以減輕數(shù)據(jù)庫負載。它通過在內(nèi)存中緩存數(shù)據(jù)和對象來減少讀取數(shù)據(jù)庫的次數(shù),從而提高動態(tài)、數(shù)據(jù)庫驅(qū)動網(wǎng)站的速度。


可以用來做緩存,比如客戶端本來每次操作都需要操作數(shù)據(jù)庫,會嚴重影響效率,這時在中間加一層緩存系統(tǒng),就提升了性能。基于http協(xié)議的通信用memcached是一個不錯的選擇,如果是tcp長鏈接,直接維護一個在線的內(nèi)存對象就可以了。 類似的技術(shù)還有redis等。


5.glog/zlog:你肯定需要記錄日志,看愛好嘍。


6.tcmalloc:內(nèi)存性能分析


7.distcc:分布式編譯工具,之前每次修改代碼都要make半個小時,用distcc進行多臺電腦同時幫你編譯,快很多。


以上文章來源于網(wǎng)絡(luò),如有侵權(quán)請聯(lián)系創(chuàng)一網(wǎng)的客服處理。謝謝!

最新文章