Node.js 網關+集羣分佈式遊戲服務器總結

這篇文章主要是這近一個月複習node.js知識的理論總結,在學完之後奎斯使用node.js模仿這種模式自己寫了一套五子棋聯機小遊戲(還差幾個小模塊就能全部完成).

一、什麼是網關+集羣式

衆所周之,遊戲開發與網站開發最大的區別之一就是,遊戲服務器是一種交互性極強的長連接網絡服務,不像網頁這種請求之後就斷開的短鏈接,爲了保證網絡不被斷開,或者出現客戶端斷開,服務器就停止運行這種情況,就引入了網關服務器。

網關服務器做爲多個遊戲服務器之間交互的中介者,網關服務器除了擔任數據包轉發的任務,還負責服務器數據的校驗、網絡的安全(提防黑客攻擊),分流等等(類似於網站中負載均衡服務器那種)。

網關在接受客戶端的數據包之後,將不同的數據轉到不同遊戲服務器,這裏直接貼上奎斯畫的全局圖:

這裏中心服務器擔任用戶個人信息相關服務與數據庫進行交互,當然不同遊戲架構不同,有的也會有多個數據庫和多個服務器進行交互,而遊戲服務器擔任玩遊戲中的相關服務,系統服務器擔任比如每日簽到,獎勵發放等等。

有些稍微大點的遊戲爲了減少負載壓力,也會採用多網關+多服務器的方式,比如一些RPG遊戲,根據遊戲區的多少分多個網關去處理。

 

二、數據傳輸:

由於node.js是採用JS語言,開發遊戲服務器起來也是大大降低了門檻,不像其他c++那樣麻煩,並且由於node.js天然的異步API很容易做到高併發,在node.js中傳輸協議用得比較多的比如websocket、tcp/ip、http等等,其實webscoket底層是基於tcp進行了一層封裝而成的一種雙全工通信協議,tcp/ip協議也就是net模塊是node.js是自帶的,ws模塊屬於第三方包需要通過npm進行下載。

這裏稍微解釋下兩者的區別,使用tcp協議就需要自己對數據包進行分包、粘包等操作,而使用webscoket它在底層已經幫你把這些全部做好,所以使用起來也非常方便,在奎斯的五子棋中就是用的webscoket協議。

 

三、數據編碼:

在數據包的編碼方面,主要是兩種:

  1. JSON編碼
  2. 二進制編碼

這兩種數據包的區別是JSON易開發,一次寫好,多次複用,但編碼後數據包體積較大,二進制編碼之後數據包非常小,但開發比較麻煩,每條命令都需要自己編碼。

還有一個就是數據的加密,一般用md5哈希算法,node.js自帶的模塊,引入後直接使用就可以了。

 

奎斯學習服務器開發沒多久,這是對目前所學知識的簡單總結,遊戲服務器的水很深,還有如幀同步、狀態同步等等許多複雜的知識需要學習。

 

感謝閱覽奎斯文章,學生黨一枚,如有錯誤歡迎大佬批評指正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章