天天看點

windows版gbc:基于enginx的元件伺服器系統paas,可用于mixed web與websocket game

本文關鍵字:利用nginx實作paas,利用nginx實作元件化遊戲引擎,(openresty)nginx+lua實作混合cs/bs一體化分布式架構

在前面的文章中說到,enginx搭配任何領域協定引擎/邏輯引擎就能形成一個專門的伺服器套裝,enginx負責任何其它的事情。比如IO,安全,前後端其它元件的協配作為膠合劑而存在。拿傳統遊戲伺服器來說,獨立遊戲(世界,地圖,現實登入,轉發網關,負載網關,etc..)處理伺服器往往是将領域邏輯做成伺服器的部分,enginx它本身沒有遊戲以上任一方面的伺服器,但利用其可lua程式設計定制IO邏輯+膠合不同伺服器的能力,可以實作和替換其中的一部分,比如,1實作不同的gamegate作消息轉發,就實作了用enginx程式設計替換了其中的網關部分:

這樣配合傳統伺服器就将其納入到了一個統一的enginx生态。向高可定制伺服器叢集系統發展,(enginx即是伺服器的架構的架構):

一個現代APP無非由界面,存儲,網絡與互動,領域邏輯等stacks組成,enginx可以負責包括網絡互動與安全在内的一系列事情,openresty+lua可定制的能力使得定制伺服器叢集變得高可用,一體化。使任何分布式叢集形成appstack化。特别适用于定制web架構及其其它tcp叢集架構。是伺服器的伺服器。

再比如,2,搭配msg middleware實作api和領域協定處理。甚至可以将領域邏輯引擎enginx生态化不需要外來伺服器實作(基于lua的領域引擎不會比原生本地的伺服器性能下降多少)。甚至向元件伺服器系統發展:

比如,進一步,配合協定處理,enginx能使任何分布式長連結應用共享與WEB一樣的語義化協定(不需要定制協定處理細節):

比如,具體到網絡互動細節部分(協定處理)的一種實作法,可以做成更一體化的方案,比如類web的協定封裝,比如websocket,其實二端通訊,無論是基于多進階的應用層進階協定如HTTP,WEBSOCKET都要加上自己領域的那一層,這些是語義化的東西,PB即可以做。如果是簡單基本websocket的遊戲服務端架構的話。那麼隻需要提供網絡支援即可(或者再加上一個協定文檔化的東西比如pbc,portobuffer)。這樣基本上就是一個簡單的元件化語義遊戲服務端架構了。

更甚至,配合語言系統,enginx甚至能使之成為一個容器性質(且以語言後端為基礎的,下面會說到)的APP環境:

比如,當這種語言是一種腳本語言時,配合解釋器開一個worker線程執行一段腳本就達了這個目的。(這就是不折不扣的paas+langsys backend baas了)。這展現了enginx,能直接接上語言,以語言後端真正成為領域邏輯伺服器的特點且以容器的方式進行。這就是“元件+腳本元件+容器”了

好了,VS傳統伺服器,GBC即是以上談到的元件伺服器的一種實作:

gbc的特點 VS kbe:傳統伺服器叢集與元件伺服器系統

這個對比幾乎是專門的伺服器叢集(傳統伺服器)vs邏輯清希的腳務器腳本化元件(元件伺服器)的差別了。

它有一台beanstalked和pbc組成的領域協定處理系統。niginx隻負責io和中轉部分。我認為這是除了語言後端的邏輯處理,其網絡協定處理方面是作為元件伺服器化的另一大特點,其以語言為容器制造worker的特點。每個腳本都是一個app,一個應用的特點,更是其同時可用于遊戲伺服器和一般化HTTP WEB伺服器的二大努力。

可以看出,元件伺服器的邏輯更清晰,突出語言後端,CS/BS全包架構,定制邏輯引擎方面的能力更強大。與單語言環境的PAAS相比可以同時接上多語言促成多語言環境下的PAAS。

gbc改造成windows版本

gbc預設隻在unix系釋出運作,流程邏輯基本上是py virtualenv利用supervisor開啟nginx,redis,beanstalk+2個app的守護過程:由于作為主體的openresty與其它元件都在windows上有實作,除在win下supervisor不能移殖外其它都可移殖是以可以輕易将其移殖到windows上。全程隻多了那個supervisor,隻要把這個去除(換成普通的windows支援的調用方式即可),gbc本身的framework和package都并不用動。

改動的部分:主要是配置部分和啟動部分(有四個檔案start_server,shell_func.sh,shell_func.lua,start_work.lua需要涉及到和簡化掉,前二基本可直接删除我把它做成了以下一個簡化濃縮的bat如下),後二個檔案需大改(涉及到很多路徑修改的部分看下載下傳):

luajit %CD%\update_config.lua
cd %APPSTACK_ROOT%\openresty\
RunHiddenConsole nginx2
cd %APPS_ROOT%\gbcdata\
RunHiddenConsole beanstalkd -l 127.0.0.1 -p 11300 -b %APPS_ROOT%\gbcdata\db
RunHiddenConsole redis-server2 %APPSTACK_ROOT%\redis\redis.conf
cd %GBC_ROOT%\
 
REM 這裡的路徑要做成workerbootstrape中按approotpath為key取configs的形式:  即其中 local appConfig = self._configs[appRootPath]這句
start luajit start_worker.lua %APPSTACK_ROOT%\gbc %APPS_ROOT:\=/%/gbcdata/apps/welcome
start luajit start_worker.lua %APPSTACK_ROOT%\gbc %APPS_ROOT:\=/%/gbcdata/apps/tests           

以下是效果和運作圖:

本地下載下傳:

gbc.rar

(此處不設回複,掃碼到微信參與留言,或直接點選到原文)

windows版gbc:基于enginx的元件伺服器系統paas,可用于mixed web與websocket game

繼續閱讀