遊戲服務器開發技術選型

服務器引擎


這裏html

數據庫(緩存)


如今比較流行的兩種數據庫,關係型數據庫mysql,sql server和非關係型數據庫redis、mongodb。mysql

memcached曾經的優點是能夠集羣,可是如今redis也能夠了。git

redis支持更多數據結構,支持數據持久化。因此redis能夠看作memcached的超集。github

redis最強大的特性是zset,redis有hash,可是隻有一層深度,mongodb是有理論上無限深度的hashredis

mongodb是真正的數據庫,而不是緩存數據庫,他的競爭對手應該是mysql等rdb數據庫sql

實際應用中,我認爲最佳搭配是mysql + redis,操做都很方便,兼顧速度和容量mongodb

 

服務端架構


 點這裏數據庫

 

內存


 

https://github.com/cloudwu/skynet/wiki/MemoryHook緩存

 

網絡協議


客戶端與服務器之間協議通訊,能夠用tcp或者http。主要看遊戲模型,若是是那種弱聯網單機玩法,用http足夠了。服務器

不過tcp用的比較仍是比較多的。如今的網絡遊戲大多數都是tcp,像MMORPG類遊戲。

udp:其實遊戲是有udp的,在一些高效率的場景下好比pvp即時戰鬥,tcp的擁塞控制和超時重傳並不適合,有些就用的udp,而後本身作丟包重發,拿網絡公平性換遊戲局部的效率。

在遊戲服是單機玩法用http協議,戰鬥服須要長鏈接保存協議狀態,用的tcp。

 

打包協議


1.protobuf - 你們都知道的protobuf

2.Json - 這個算湊數嗎?

3.MessagePack - It's like JSON. but fast and small.

http://blog.51cto.com/yaocoder/995210

 

I/O frameworks


 libevent,boost.asio等網絡庫,網上有不少開源網絡庫,與其本身造輪子,不如就用開源網絡庫做爲本身服務器的通信庫。最出名的就屬libevent和boost.asio了。

Boost的ASIO是一個異步IO庫,封裝了對Socket的經常使用操做,簡化了基於socket程序的開發。支持跨平臺。

libevent是一個C語言寫的事件驅動的開源網絡庫

 

集羣


RPC底層模式

基於基於zeromq(rabbitmq)的跨進程通訊

zeromq:消息隊列,一個穩健,簡潔的多進程通信方案的基礎。ZeroMQ 並非一個對socket的封裝,不能用它去實現已有的網絡協議。它有本身的模式,不一樣於更底層的點對點通信模式。它有比 tcp 協議更高一級的協議。

actor模式

參考skynet集羣

 

單元測試


 http://www.cnblogs.com/coderzh/archive/2009/04/06/1426755.html

 

日誌


 spdlog

 log4cxx

 

其餘


games github上的一個遊戲列表

高性能分佈式遊戲服務器框架

List of game engines

相關文章
相關標籤/搜索