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%gbcdatadb
RunHiddenConsole redis-server2 %APPSTACK_ROOT%redisredis.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
- ios 设置label的高度随着内容的变化而变化
- Android字体大小怎么自适应不同分辨率?
- iOS textfield实现一行的数字限制,超出进行弹框
- android https安全连接
- 第二章 正则表达式位置匹配攻略
- 从网络上下载省份城市名称并存入文件然后进行读取省份城市
- android 应用模式之mvp
- Android网络请求框架之Retrofit实践
- iOS 跳转到应用所在的App Store市场
- 第一章 正则表达式字符匹配攻略
- js最新手机号码、电话号码正则表达式
- iOS afnetworking最新版报错 没有AFHTTPRequestOperationManager类了
- Android Service学习之本地服务
- iOS .pch文件的使用
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Uni-app中几种常用的提示框
- 声如其闻,DuerOS中的声音播放
- JavaScript中查找指定字符串的几种方式
- Python单元测试
- 获取当前时间的标准时间,转换为年月日:时分秒的格式,以及dayjs的使用
- 8086汇编语言——双层循环的使用
- 在Linux中对文件的编码及对文件进行编码转换操作
- shutil模块,为什么说它是os模块的兄弟模块?
- HTML5+CSS3项目实战之河马牙医首页、百度首页、Mac桌面、简书首页、登录注册页面、苏宁易购首页
- 【Vue.js】Vue.js中的Vuex、Vue-Ajax和京东购物车项目实战
- ubuntu16.04安全小结-01
- 重新认识HTTP3xx重定向机制
- 【Vue.js】Vue.js中常用的UI组件库和Vue Router
- 四大查找算法
- 从Python调用堆栈获取行号等信息