前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >​windows版gbc:基于enginx的组件服务器系统paas,可用于mixed web与websocket game

​windows版gbc:基于enginx的组件服务器系统paas,可用于mixed web与websocket game

原创
作者头像
minlearn
修改2020-09-27 14:33:51
7590
修改2020-09-27 14:33:51
举报
文章被收录于专栏:minlearnprogrammingminlearnprogramming

本文关键字:利用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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档