1. 程式人生 > >[叄]Pomelo遊戲伺服器程式設計分享 之 伺服器結構與配置分析

[叄]Pomelo遊戲伺服器程式設計分享 之 伺服器結構與配置分析

網路部署結構

我們先看一下Pomelo伺服器網路部署情況,直接上圖


Pomelo伺服器端框架簡單地可分為兩層,即連結層(Connector、Gate)和服務層(Logic、Master),也叫前端伺服器(frontend server)和後端伺服器(backend server)。

連結層直接與客戶端進行網路通訊,客戶端的請求通過連結層轉發到服務層的Logic進行處理,處理完後將結果交由Connector轉發給客戶端。

這樣的結構可以方便我們進行伺服器擴充套件,特別是負責均衡。

需要特殊說明的是Gate和Master。客戶端第一次請求是發到Gate伺服器,然後由Gate伺服器為客戶端分配一個Connector伺服器,具體的分配策略是程式可控的。Master主要負責伺服器管理,如新開伺服器、關閉伺服器。

由於Logic伺服器可以有多個,客戶端傳送請求時就需要告訴Connector訊息需要傳送到哪個Logic伺服器上,為此Pomelo引入了路由(Route)機制,即客戶端所有的訊息需要指定路由資訊,一邊訊息正確投遞。

Logic伺服器按功能可劃分為不同的伺服器,如場景伺服器、聊天伺服器、使用者資訊管理伺服器等,那麼不同伺服器之間難免需要進行通訊,為此Pomelo引入了RPC機制,即所有邏輯伺服器之間的通訊可以通過RPC呼叫來完成,這樣就很方便了。

目錄結構及其配置檔案

Pomelo伺服器框架是強依賴於指令碼目錄結構的,即伺服器端某些目錄尤其特殊功能定義,具體如下圖:
其中,橙色 部分的目錄結構是Pomelo框架規定的,藍色部分是Node.js規定的,綠色部分是使用者定義並可以被Pomele框架按照一定規則讀取的。 對部分目錄做相應說明如下: ./game-server 這個目錄是通過pomelo init命令建立專案後生成的,所有的遊戲伺服器相關的程式碼和配置檔案都將放在這個裡面 ./game-server/app 用於放置伺服器端程式碼檔案 ./game-server/app/servers 用於放置虛擬伺服器程式碼,這個目錄是pomelo依賴的,當我們在配置檔案中指定了開啟某某伺服器時,pomelo會到這個目錄下面找到名字與其對應的目錄,然後找該目錄下相應的handler、remote、filter目錄下的js程式碼檔案,並執行。

./game-server/app/servers/服務型別名稱/handler 用於放置處理使用者請求(基於Route的使用者請求,伺服器名稱和handeler目錄下的js檔名稱都將作為Route的一部分)的程式碼檔案


./game-server/app/servers/服務型別名稱/remote 用於放置處理伺服器間呼叫(RPC呼叫)的程式碼檔案

./game-server/app/servers/服務型別名稱/filter 用於放置處理filter邏輯(包括before和after)的程式碼檔案


./game-server/logs 用於存放日誌檔案


./game-server/app.js 伺服器程式啟動入口檔案,可以在這個檔案裡面對Pomelo框架進行相應的配置設定,具體方法參見下一節介紹。

./game-server/config 用於放置配置檔案,包括Pomelo框架的配置檔案,第三方外掛的配置檔案,以及使用者自定義的配置檔案(建議在該目錄下將相應目錄來儲存使用者自定義配置檔案,這樣不至於太亂)

./game-server/config/master.json Master伺服器使用的配置檔案

./game-server/config/servers.json 也是給Master用的,用於定義伺服器叢集開啟,如某某硬體伺服器上開啟某某遊戲伺服器

./game-server/config/log4js.json 日誌配置

./game-server/config/serverProtos.json 待研究

./game-server/config/adminUser.json 待研究

./game-server/config/dictionary.json 用於定義Route壓縮的字典配置檔案


Pomelo框架設定

框架設定的實現途徑有兩種,一是通過上述的配置檔案,二是通過Application.set()方法。 關於可以使用Application.set()方法進行設定的Pomelo框架引數,可參見下圖

參考資料:

./game-server/logs 用於存放日誌檔案 ./game-server/app.js 伺服器程式啟動入口檔案,可以在這個檔案裡面對Pomelo框架進行相應的配置設定,具體方法參見下一節介紹。

相關推薦

[]Pomelo遊戲伺服器程式設計分享 伺服器結構配置分析

網路部署結構 我們先看一下Pomelo伺服器網路部署情況,直接上圖 Pomelo伺服器端框架簡單地可分為兩層,即連結層(Connector、Gate)和服務層(Logic、Master),也叫前端伺服器(frontend server)和後端伺服器(backend se

python程式設計資料結構演算法(三)

連結串列 為什麼需要連結串列 順序表的構建需要預先知道資料大小來申請連續的儲存空間,而在進行擴充時又需要進行資料的搬遷,所以使用起來並不是很靈活。 連結串列結構可以充分利用計算機記憶體空間,實現靈活的記憶體動態管理。 連結串列的定義 連結串列(Linked li

python程式設計資料結構演算法(九)

快速排序 快速排序(英語:Quicksort),又稱劃分交換排序(partition-exchange sort),通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整

python程式設計資料結構演算法(十一)

歸併排序 歸併排序是採用分治法的一個非常典型的應用。歸併排序的思想就是先遞迴分解陣列,再合併陣列。 將陣列分解最小之後,然後合併兩個有序陣列,基本思路是比較兩個陣列的最前面的數,誰小就先取誰,取了後相應的指標就往後移一位。然後再比較,直至一個數組為空,最後把另一

python程式設計資料結構演算法(十二)

搜尋 搜尋是在一個專案集合中找到一個特定專案的演算法過程。搜尋通常的答案是真的或假的,因為該專案是否存在。 搜尋的幾種常見方法:順序查詢、二分法查詢、二叉樹查詢、雜湊查詢 二分法查詢 二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好;其缺點是要求待

python程式設計資料結構演算法(十三)

樹與樹演算法 樹的概念 樹(英語:tree)是一種抽象資料型別(ADT)或是實作這種抽象資料型別的資料結構,用來模擬具有樹狀結構性質的資料集合。它是由n(n>=1)個有限節點組成一個具有層次關係的集合。把它叫做“樹”是因為它看起來像一棵倒掛的樹,也就是說它

python程式設計資料結構演算法(十四)

二叉樹 二叉樹的概念 二叉樹是每個節點最多有兩個子樹的樹結構。通常子樹被稱作“左子樹”(left subtree)和“右子樹”(right subtree) 二叉樹的性質 性質1: 在二叉樹的第i層上至多有2^(i-1)個結點(i>0) 性質2: 深度為k

華為雲伺服器實戰 Gitlab安裝配置使用

簡介     GitLab是一個利用Ruby on Rails開發的開源應用程式,

0x10軟考|網路工程師經驗分享網路互聯網際網路(四)

目錄 一、傳輸層協議TCP 二、傳輸層協議UDP 三、常見應用層協議 一、傳輸層協議TCP TCP協議:傳輸控制協議,面向位元組流按順序、連線、可靠、全雙工,可變滑動視窗、緩衝累積傳送。協議號6 下面是TCP段(斷頭),TCP頭(傳輸頭),TCP包

CentOS伺服器下nginx防盜鏈介紹配置

一、防盜鏈介紹 1.什麼是防盜鏈 簡單的說,就是某些不法的網站,通過在其自身網站程式裡為經許可非法呼叫其他網站資源然後在自己的網站上顯示這些呼叫的資源,達到了填充自身網站顯示的效果,但是浪費了呼叫資源網站的網站流量,造成其他網站的頻寬及服務壓力吃緊,甚至宕機。

【NOI OpenJudge】【1.4】程式設計基礎邏輯表示式條件分支

01:判斷數正負 #include<cstdio> #include<iostream> using namespace std; int main(){ int n; cin>>n; if(n > 0){

【NOI OpenJudge】【1.3】程式設計基礎算術表示式順序執行

01: A+B問題 #include<iostream> using namespace std; int main(){ int a, b; cin>>a>>b; cout<<a+b<<"\n"; return

0x11軟考|網路工程師經驗分享網路互聯網際網路(五)

目錄 一、路由器技術NAT 二、路由器技術VLSM和CIDR 三、路由器技術QoS 四、路由器技術MPLS 五、路由器技術組播 一、路由器技術NAT NAT:網路地址翻譯,解決IP短缺,路由器內部和外部地址進行轉換。 靜態地址轉換:靜態NAT(一對一) 動

NOI題庫答案(1.3 程式設計基礎算術表示式順序執行)

01:A+B問題 總時間限制: 1000ms        記憶體限制: 65536kB 描述 在大部分的線上題庫中,都會將A+B問題作為第一題,以幫助新手熟悉平臺的使用方法。 A+B問題的題目描述如下:給定兩個整數A和B,輸出A+B的值。保證A、B及結果均在

NOI題解(1.4程式設計基礎邏輯表示式條件分支)

01:判斷數正負 #include "iostream" #include "math.h" #include "iomanip" /* */ using namespace std; int

Zabbix伺服器和客戶端的安裝配置

一,介紹 ZABBIX(音同Ž æ BIX)是一個基於WEB介面的提供分散式系統- -監視以及網路監視功能的企業級的開源解決方案。 ZABBIX能監視各種網路引數,保證伺服器系統- -的安全運營;並提供靈活的通知機制以讓系統- -管理員快速定位/解決存在的各種問題。 Z

V-1-1 Vmware桌面虛擬化環境搭建ESXi安裝配置

vmware vdi esxi 首先將刻錄好的優盤(光盤)插入服務器,並且在啟動選項中選中對應的設備。如何刻錄請參考文檔:O-4 ISO的刻錄如圖所示,將會自動進入安裝進度條當進度條讀取完畢後,可以看到黑黃相間的畫面,其中會顯示安裝的版本,如圖為5.5版本。在加載界面加載完畢後會出現如下畫面,根據

Hadoop Hive 安裝配置

file 接下來 重新 軟件 driver name arc /etc ted Hive 作為基於Hadoop的一個數據倉庫工具,可將sql語句轉換為MapReduce任務進行運行。 通過類SQL語句快速實現簡單的MapReduce統計,不用開發專門的MapReduce應用

Linux筆記網絡監控nagios安裝配置

nagios linux 安裝與配置 nagios簡介 Nagios是一款開源的電腦系統和網絡監視工具,能有效監控Windows、Linux和Unix的主機狀態,交換機路由器等網絡設置,打印機等。在系統或服務狀態異常時發出郵件或短信報警第一時間通知網站運維人員,在狀態恢復後發出正常的郵件或短信通

AndroidJSJsBridge使用原始碼分析

在Android開發中,由於Native開發的成本較高,H5頁面的開發更靈活,修改成本更低,因此前端網頁JavaScript(下面簡稱JS)與Java之間的互相呼叫越來越常見。 JsBridge就是一個簡化Android與JS通訊的框架,原始碼:https://github.com/lzyzsd