pomelo架構概覽

2021-09-02 05:30:14 字數 3053 閱讀 1994

pomelo之所以簡單易用、功能全面,並且具有高可擴充套件性、可伸縮性等特點,這與它的技術選型和方案設計是密不可分的。在研究大量遊戲引擎設計思路基礎上,結合以往遊戲開發的經驗,確定了pomelo框架的設計方案。

node.js自身特點與遊戲伺服器的特性驚人的吻合。 在node.js的官方定義中, fast、scalable、realtime、network這幾個特性都非常符合遊戲伺服器的要求。遊戲伺服器是個網路密集型的應用,對實時性要求極高,而node.js在網路io上的優勢也完全可以滿足這點。使用node.js開發遊戲伺服器的優勢總結:

說明: 上圖中的方塊表示程序, 定義上等同於「伺服器「

執行架構說明:該遊戲執行架構表面上看與web應用執行架構很類似,connector類似於web應用的apache/nginx等web伺服器,後端的伺服器群類似於web應用中的應用伺服器(如tomcat),但實際上存在著很大的差別:

遊戲的執行架構很複雜,要想支撐起如此複雜的執行架構,必須要有乙個框架來簡化開發。

pomelo正是這樣乙個框架,它使我們用最少的**, 最清晰的結構來實現複雜的執行架構。

pomelo framework的組成架構如圖所示:

在web應用中, 每個伺服器是無狀態、對等的, 開發者無需通過框架或容器來管理伺服器。

但遊戲應用不同, 遊戲可能需要包含多種不同型別的伺服器,每類伺服器在數量上也可能有不同的需求。這就需要框架對伺服器進行抽象和解耦,支援伺服器型別和數量上的擴充套件。

客戶端的請求、響應與web應用是類似的, 但框架是基於長連線的, 實現模式與http請求有一定差別。

廣播是遊戲伺服器最頻繁的操作, 需要方便的api, 並且在效能上達到極致。

儘管框架盡量避免跨程序呼叫,但程序間的通訊是不可避免的, 因此需要乙個方便好用的rpc框架來支撐。

* 松耦合、可插拔的應用架構。

應用的擴充套件性很重要, pomelo framework支援以component的形式插入任何第三方元件, 也支援加入自定義的路由規則, 自定義的filter等。

下面分別對這三個目標進行詳細的分析:

伺服器的抽象與分類

該架構把遊戲伺服器做了抽象, 抽象成為兩類:前端伺服器和後端伺服器, 如圖:

前端伺服器(frontend)的職責:

後端伺服器(backend)的職責:

伺服器的鴨子型別

動態語言的物件導向有個基本概念叫鴨子型別。

伺服器的抽象也同樣可以比喻為鴨子, 伺服器的對外介面只有兩類, 一類是接收客戶端的請求, 叫做handler, 一類是接收rpc請求, 叫做remote, handler和remote的行為決定了伺服器長什麼樣子。

因此我們只要定義好handler和remote兩類的行為, 就可以確定這個伺服器的型別。

伺服器抽象的實現

利用目錄結構與伺服器對應的形式, 可以快速實現伺服器的抽象。

圖中的connector, area, chat三個目錄代表三類伺服器型別, 每個目錄下的handler與remote決定了這個伺服器的行為(對外介面)。 開發者只要往handler與remote目錄填**, 就可以實現某一類的伺服器。這讓伺服器實現起來非常方便。

讓伺服器動起來, 只要填乙份配置檔案servers.json就可以讓伺服器快速動起來。

配置檔案內容如下所示:

,]

,"area":[

,,],

"chat":}}

所有的web應用框架都實現了請求與響應的抽象。儘管遊戲應用是基於長連線的, 但請求與響應的抽象跟web應用很類似。

下圖的**是乙個request請求示例:

請求的api與web應用的ajax請求很象,基於convention over configuration的原則, 請求不需要任何配置。 如下圖所示,請求的route字串:chat.chathandler.send, 它可以將請求分發到chat伺服器上chathandler檔案定義的send方法。

pomelo的框架裡還實現了request的filter機制,廣播/組播機制,詳細介紹見pomelo框架參考。

架構中各伺服器之間的通訊主要是通過底層rpc框架來完成的,該rpc框架主要解決了程序間訊息的路由和rpc底層通訊協議的選擇兩個問題。

伺服器間的rpc呼叫也實現了零配置。例項如下圖所示:

上圖的remote目錄裡定義了乙個rpc介面: chatremote.js,它的介面定義如下:

chatremote.kick = function(uid, player, cb)
其它伺服器(rpc客戶端)只要通過以下介面就可以實現rpc呼叫:

});

這個呼叫會根據特定的路由規則**到特定的伺服器。(如場景服務的請求會根據玩家在哪個場景直接**到對應的server)。

rpc框架目前在底層採用socket.io作為通訊協議,但協議對上層是透明的,以後可以替換成任意的協議。

component是pomelo自定義元件,開發者可自載入自定義的component。

component在pomelo框架參考將有更深入的討論。

以下是component的生命週期圖:

)上面的應用框架構成了pomelo framework的基礎。在此基礎上,配合pomelo提供的遊戲開發庫和相關工具集,開發遊戲伺服器將變得非常方便。 後面的tutorial將帶我們進入開發遊戲應用的實際案例。

OpenCart 架構概覽

opencart是乙個 設計精緻小巧的電子商務系統。written by iefreer founder of techbrood.com 1 mvc架構 opencart是基於mvc正規化的。model層負責獲取資料。和其他一些框架如cakephp相比,model的功能實現有限但簡潔,直接呼叫db...

CryEngine架構概覽

這裡說的架構只是從大體上初略描述,以後還會繼續更新詳細的說明從模組的分布上來看cryengine3和cryengine2沒有區別,其主要的dll從檔名就可以看出個大概 這裡最有意思的是 其中crysystem是引擎和外界互動的介面,從crysystem中可以獲取各個介面,例如 igame 遊戲框架 ...

SpringCloud整體架構概覽

目標 協調任何服務,簡化分布式系統開發。簡介構建分布式系統不應該是複雜的,springcloud對常見的分布式系統模式提供了簡單易用的程式設計模型,幫助開發者構建彈性 可靠 協調的應用程式。springcloud是在springboot的基礎上構建的,使開發者可以輕鬆入門並快速提高工作效率。spri...