步驟
簡介
Pomelo:一個快速、可擴展、Node.js分佈式遊戲服務器框架。
本文講述如何實現一個簡易的分佈式聊天應用。爲了簡單化,我們將直接從gitee(碼雲)上獲取對應的源碼,或者先使用pomelo init,獲得一個初始的項目目錄,然後參照gitee(碼雲)上的源碼,建立相應的目錄,在默認的位置填充相應的源碼。
服務端
源碼結構介紹
game-server文件夾
game-server目錄放的是所有遊戲服務器的邏輯,以文件game-server/app.js作爲入口,運行遊戲的所有邏輯和功能。
servers文件下有三個目錄,分別是 chat、connector、gate。在 pomelo中,使用路徑來區分服務器類型,因此三個目錄代表了三種不同類型的服務器。每一個目錄下面可以定義handler和remote來決定這個服務器的行爲。不瞭解Pomelo中的術語,不分別解釋,可查看學習
- gate服務器: 在一般情況下用戶量一臺機器就可以支撐,但用戶量多了就得擴充服務器,gate服務器的作用就相當於前端負載均衡服務器;邏輯代碼在gateHandler.js中,它接受客戶端向gate服務器發出查詢connector的請求,返回給客戶端一個可以連接的connector的服務器(ip,port)。分配策略是根據客戶端的某一個key做hash得到connector的id,這樣就可以實現各個connector服務器的負載均衡;
- connector服務器: 邏輯代碼在entryHandler.js中,它主要完成接受客戶端的請求,路由客戶端的請求到chat服務器,維護與客戶端的連接; connector服務器會同時擁有clientPort和port,其中clientPort用來監聽客戶端的連接,port端口用來給後端提供服務;
- chat服務器: handler和remote決定了服務器的行爲。handler中處理用戶的send請求,而remote是當有用戶加入或退出時,由connector來發起遠程調用時調用的。由於在remote裏涉及到用戶的加入和退出,所以會有對channel的操作。
game-server/config: 遊戲服務器所用到的配置文件存放的位置,配置信息使用JSON格式,包含有日誌,master服務器和其他服務器的配置信息。除了這個pomelo所需的配置信息外,一般情況下,也將遊戲邏輯所需要的配置信息放到這個目錄下,例如數據庫的配置信息,地圖信息等。
game-server/logs: 存放遊戲服務器產生的所有的日誌信息。
web-server
web服務器,如果你是個H5遊戲,這裏就是Web客戶端,如果是IOS、Andriod客戶端,這目錄就沒什麼用。
shared
公共代碼存放處,這裏要以放一些共用代碼
安裝Pomelo
Windows下需要的環境支持
本文提供下載地址: node.js、VS2010、Python,若以上地址失效可自行到百度查找下載。
1. NodeJS(本文使用V12.15.0,最新版本可能報錯)
windows下默認安裝.msi後綴的包,檢驗是否安裝好cmd下,輸入node -v,顯示版本號說明安裝成功。
2. C++編譯環境(直接安裝VS2010)
不想裝vs2010這類佔10G硬盤空間的東西,直接npm install --global --production windows-build-tools,需要大約一共2G左右
3. Python(建議使用2.7.3, 2.5 < 版本 < 3)
windows下默認安裝.msi後綴的包,檢驗是否安裝好cmd下,輸入python --version,顯示版本號說明安裝成功(若安裝報錯可查看處理)。
安裝Pomelo
1.npm安裝pomelo: 安裝完nodejs後,會自動安裝上npm,可以通過npm來安裝pomelo。但是國內npm可以使用cnpm來安裝,命令行:npm install pomelo -g;
2.通過下載源代碼的方式安裝: $ git clone https://github.com/NetEase/pomelo.git
$ cd pomelo;
$ npm install -g;
3.npm install 無響應:
可參考:npm install慢/無響應解決方案
查看pomelo是否安裝完成: 可用命令行:pomelo -h 來查看pomelo是否安裝完成。
創建項目(可省略 使用下載的項目)
- 新建一個項目目錄 ProjectName;
- 打開cmd, 使用cd ProjectName 進入該目錄 執行 pomelo init;
- 運行生成的文件npm-install.bat。 (其它平臺執行npm-install.sh)
運行項目
啓動遊戲服務器方法:
$ cd game-server
$ pomelo start
報錯解決方法
若執行後,出現如下 錯誤提示:
[2017-11-23 11:54:42.226] [ERROR] console - Option path is not valid. Please refer to the README.
[2017-11-23 11:54:42.226] [ERROR] console - Option close timeout is not valid. Please refer to the README.
[2017-11-23 11:54:42.226] [ERROR] console - Option heartbeats is not valid. Please refer to the README.
[2017-11-23 11:54:42.226] [ERROR] console - Option log level is not valid. Please refer to the README.
問題原因: 新版的socket.io用法不正確的導致的,官方早已修復,就是沒有publish到npm包中;
解決方式: 把node_modules目錄下的pomelo中sioconnector.js(…/game-server/node_modules/pomelo/lib/connectors/sioconnector.js)替換爲 gitee(碼雲)地址下載 或 github地址下載
啓動web服務器方法:
$ cd web-server
$ node app.js
示例下載
https://gitee.com/ls_qq2670813470/chatofpomelo_websocket
客戶端
本文提供了兩個版本,分別是
https://gitee.com/ls_qq2670813470/ccc_pomelo_chat_client_A
https://gitee.com/ls_qq2670813470/ccc_pomelo_chat_client_B
兩個版本都是在一個基礎上修改。