分享网页游戏后台开发技术经验
操作方法
-
01
盡管網頁游戲開發應用的是服務器端腳本編寫,但是它的運行還是需要一定的客戶端技術支持的,比如網頁瀏覽器,或者瀏覽器上常用的一些插件,如Java或者Flash。最新的網頁游戲典型應用是大型多人在線角色扮演游戲。 最近參與開發了一款網頁游戲,網頁游戲和普通客戶端游戲不同,雖然都可以稱為網絡游戲,從服務器角度來說,網頁游戲所承載的用戶量是很少的,一般一組服務器3-4000玩家同時在線。當然,技術含量也相對較低。開發周期短,一般為4-5個月。現在就網頁游戲后臺開發的技術,談談自己的看法。 首先是網關,所有玩家進入游戲,都是同網關連接,網關起著隔離游戲邏輯服務器和玩家的作用,保護游戲服務器內部不受外部玩家有意或無意的攻擊。一般一個網關下面會掛上多組地圖服務器,網關將用戶邏輯轉發到地圖服務器上做具體的處理,處理完成后,地圖服務器將處理結果送回網關,網關再轉發給玩家。乍一看,網關似乎有可能成為性能瓶頸,確實是性能瓶頸。在網絡游戲中,單個客戶端上行流量是很小的,一般客戶端都會做控制,在戰斗和行走的時候,客戶端沒秒鐘基本上只會有3條上行數據,但是下行廣播數據是非常龐大的,曾經測試過300人同屏在線,每秒鐘3個位置更新消息,廣播量基本上是300*300*3=270000條消息,假如服務器為每一條消息調用一次send系統調用,那么意味著每秒鐘27萬次系統調用,是多么的龐大啊! 一般網關前端收發消息部分毫無疑問會采用epoll的邊緣出發模式(非阻塞),多線程收/多線程發。客戶端發上來的消息,通過網關路由到地圖服務器做具體的邏輯處理,對于地圖服務器通常都是一個服務器對應一副或者多幅地圖,在這個地圖上玩家發生的所有事件,都有這個服務器來處理,地圖服務器采用單線程/單進程這種模式,主要是保證游戲邏輯的順序處理。評價地圖服務器處理能力的一個指標是地圖服務器可以支撐多少怪,多少玩家,因為怪的AI都在服務器這邊做,服務器需要主動觸發事件,廣播給玩家,這個時候timer是不可缺少的資源,timer開得越多,系統性能也就越差了。 另外,有一種簡單的處理方式,開一個timer,幾十毫秒統一處理一下地圖中的事件,比如補怪等。對于數據庫訪問這一塊,目前很多網頁游戲開發,都使用的是和mongodb類似的內存數據庫,是不是可以不采用cache,而直接訪問數據庫了呢?答案是錯誤的,根據具體情況來定吧,基本上到最后,性能瓶頸都會在數據庫I/O這一塊了,主要是讀。對于一些訪問量比較大的業務,比如,任務,戰斗,背包等,肯定是讀緩存,寫緩存和數據庫同時進行。再切地圖和玩家下線時,清掉內存中的信息。原則上是服務器需要處理所有業務邏輯,所有接入游戲服務器的客戶端都需要在網關進行鑒權認證,只有合法玩家才能接入游戲邏輯服務器。 為了不使網絡延時導致玩家體驗感下降,在及時戰斗的時候,客戶端需要先播放模擬打斗的動畫,由服務器進行驗證。不同地圖消息的轉發在地圖管理器上面進行,地圖管理器是一個進程,維護了所有地圖服務器的連接,所有消息轉發都在地圖管理器來完成。同時,為了減輕網關的壓力,一般一個網關接入的1000人左右,分多個網關,不同網關的玩家信息,通過地圖管理器來轉發。以下是服務器選擇性的用到的一些開源的軟件,并在此基礎上做了封裝:json4cpp、log4cpp、libevent、ACE、boost、mongoclient。 一個網頁游戲開發要做大做強,首先要考慮的就是服務器端要如何實現,這樣才能穩定網頁游戲的運行,讓游戲者能夠輕松的玩這個游戲,讓游戲者好好的體驗游戲的穩定。
總結
以上是生活随笔為你收集整理的分享网页游戏后台开发技术经验的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [蓝桥杯2017决赛]图书排列-next
- 下一篇: [蓝桥杯2016决赛]阶乘位数-数论