前言
不管是在業界開源領域,還是內部分享中,很少會有專門針對游戲業務特征進行專門設計的組件、類庫或者框架。我們從游戲的客戶端方面來看,一款專業的游戲客戶端引擎,已經是游戲開發的標配,flash,Cocos,Unity,Unreal等,但是服務器端,我們幾乎找不到同樣重量級的產品(當然有針對海外開發者快捷開發的服務器平臺,比如GAE,GameSparks,PlayFab等能滿足常規的抽卡游戲服務器的業務)。
在游戲服務器端開發所有要面對的問題中,有兩個是最核心和最普遍的:一是和客戶端的網絡協議通信;二是游戲用戶的數據處理。對于和客戶端通訊的這個問題,大量的游戲開發者會使用“通用”的開源組件,比如Protocol Buffer、Thrift、Jetty、Node.js等等通信或RPC框架。當然,很多大廠有自己封裝的網絡庫,遇到問題可以有計劃的進行排查和修復,如果你用到了一些開源的網絡庫遇到了蛋疼問題,你可能一個禮拜也不一定能解決,我曾經在thrift的rpc調用上遇到過假死的情況,為了解決這個問題我研讀他們的代碼,發現是沒有設置超時時間導致的io讀寫被阻塞了。
在游戲業務領域中,一般情況是客戶端發起請求,服務器端接收請求,再根據請求處理對應的業務邏輯并做出響應。
除此之外,我們還會遇到“數據同步”方式:游戲中某個角色的HP、人物移動,技能的buff生效,活動生效,需要在客戶端和服務器之間、客戶端和