游戲服務(wù)器往往需要處理大量任務(wù),比如管理客戶端的連接、維護(hù)游戲世界的狀態(tài)、執(zhí)行游戲的邏輯等。每一項(xiàng)任務(wù)所需的系統(tǒng)資源也可能不同,比如IO密集或CPU密集等。而這些復(fù)雜的任務(wù)只有一個(gè)單獨(dú)的服務(wù)器進(jìn)程是很難支撐和管理的。所以游戲服務(wù)器往往是由多個(gè)不同類型的服務(wù)器進(jìn)程組成的集群構(gòu)成。每個(gè)服務(wù)器進(jìn)程專注于一塊具體的業(yè)務(wù),比如連接服務(wù)、場(chǎng)景服務(wù)、聊天服務(wù)等。服務(wù)器進(jìn)程之間相互寫作,對(duì)外提供完整的游戲服務(wù)。由于存在上訴的復(fù)雜性,游戲服務(wù)器的開發(fā)者往往需要耗費(fèi)大量時(shí)間精力再服務(wù)器類型的劃分,進(jìn)程數(shù)量的分配以及進(jìn)程的維護(hù)、進(jìn)程間通訊、請(qǐng)求的路由等這些底層的問題上,這些都是重復(fù)而繁瑣的工作。Pomelo則是為了解決這些問題而誕生的框架。
Pomelo是一個(gè)輕量級(jí)的服務(wù)器框架,最合適的應(yīng)用領(lǐng)域是網(wǎng)頁游戲、社交游戲、移動(dòng)游戲的服務(wù)端。不推薦將Pomelo作為大型MMORPG游戲開發(fā),尤其是大型3D游戲,這需要像BigWorld商用引擎來支撐。
框架特性
- 基于Socket.io開發(fā)
- 多進(jìn)程架構(gòu):支持MMO場(chǎng)景分區(qū)和其他各類分區(qū)策略
- 服務(wù)器擴(kuò)展:快速擴(kuò)展服務(wù)器類型和數(shù)量。
- 通訊機(jī)制:請(qǐng)求、響應(yīng)、廣播
- 擴(kuò)展組件
框架優(yōu)勢(shì)
- 可伸縮性好
架構(gòu)采用多進(jìn)程單線程的運(yùn)行架構(gòu),擴(kuò)展服務(wù)器方便。
Node.js的網(wǎng)絡(luò)IO優(yōu)勢(shì)提供了高可伸縮性。 - 使用方便
開房模式與Web應(yīng)用的開發(fā)類似,都是基于Convention Over Configuration的理念,零配置。 - 松耦合可擴(kuò)展
遵循Node.js微模塊原則,框架所使用的類庫組件都是以NPM Module的形式擴(kuò)展進(jìn)來。
多進(jìn)程
Pomelo是游戲服務(wù)器框架,本質(zhì)上也是高實(shí)時(shí)、高擴(kuò)展、多進(jìn)程的應(yīng)用框架,除了在提供的庫部分有游戲?qū)S玫膸?,其余部分框架完全可用于開發(fā)高實(shí)時(shí)的應(yīng)用。而且與現(xiàn)有的Node.js高實(shí)時(shí)應(yīng)用框架如Derby、Socketstream、Meteor等相比具有更好的可伸縮性。
高可擴(kuò)展的游戲運(yùn)行架構(gòu)必須是多進(jìn)程的,Google的Gritsgame,Mozilla的Browserquest都采用了Node.js作為游戲服務(wù)器開發(fā)語言,它們都采用了單進(jìn)程的Node.js服務(wù)器,由于缺乏擴(kuò)展性,使它們可以支撐的在線用戶數(shù)量是有限的。而多進(jìn)程架構(gòu)可以很好的實(shí)現(xiàn)游戲服務(wù)器的可擴(kuò)展性,達(dá)到支撐較多的在線用戶、降低服務(wù)器壓力等要求。
Pomelo為什么采用Node.js開發(fā)?
Node.js自身特點(diǎn)與游戲服務(wù)器的特性驚人的吻合,在Node.js官方定義中,fast、scalable、realtime、network這幾個(gè)特性都非常符合游戲服務(wù)器的要求,游戲服務(wù)器是網(wǎng)絡(luò)密集型的應(yīng)用,對(duì)實(shí)時(shí)性要求極高,Node.js網(wǎng)絡(luò)IO上的優(yōu)勢(shì)完全可以滿足這點(diǎn)。
使用Node.js開發(fā)游戲服務(wù)器的優(yōu)勢(shì)
- IO與可伸縮性:IO密集型的應(yīng)用采用Node.js最合適,可以達(dá)到最好的可伸縮性。
- 多進(jìn)程單線程:Node.js天生采用單線程,使其在處理復(fù)雜邏輯時(shí)無需考慮線程同步、鎖、死鎖等問題,減少了很少邏輯錯(cuò)誤。由多進(jìn)程N(yùn)ode.js組成的服務(wù)器群是最理想的應(yīng)用架構(gòu)。
- 語言優(yōu)勢(shì):使用JavaScript開發(fā)可以實(shí)現(xiàn)快速迭代,若客戶端使用HTML5,更可實(shí)現(xiàn)代碼共用。