1 | # 游戏云服务器 gamecloud
|
2 |
|
3 | ## 概述
|
4 |
|
5 | 游戏云服务器(gamecloud)是一个基于NodeJS技术开发的纯JavaScript服务端引擎,为H5游戏量身定做,其特点如下:
|
6 |
|
7 | - 开箱即用。
|
8 |
|
9 | 游戏云服务器 的设计理念是,"简单是不够的,要极其简单"。
|
10 |
|
11 | - 开放式设计。
|
12 |
|
13 | 游戏云服务器 自然融入 npm 生态,你可以通过第三方库或自定义代码,利用插件、扩展服务、中间件、自定义事件、新增核心类等机制,随时对框架进行补足和增强。
|
14 |
|
15 | - 可伸缩性设计
|
16 |
|
17 | ### 关于集群
|
18 | - gamecloud 是一个可伸缩集群,整个集群由单台或多台服务器组成。
|
19 | - 集群运行多个不同类型的节点,灵活分配于各台服务器上,可在 ./gameconfig.js 中完成配置
|
20 | - 建议起步阶段以单服务器模式运行,熟悉体系后再扩展至由多台服务器组成的集群
|
21 |
|
22 | ```js
|
23 | let config = {
|
24 | "servers": [], //集中配置集群中所有节点,在集群中所有服务器上保持一致
|
25 | "apps": [], //配置当前服务器运行的节点列表
|
26 | }
|
27 | ```
|
28 |
|
29 | - 集群中,有且只有一个节点兼任门户节点
|
30 |
|
31 | ```js
|
32 | "apps" : [
|
33 | {
|
34 | "name" : "Chick_IOS_1",
|
35 | "script" : "facade/start.js",
|
36 | "cwd" : "./",
|
37 | "error_file" : "./logs/ios1/app-err.log",
|
38 | "env": {
|
39 | "NODE_ENV": "production",
|
40 | "sys":{
|
41 | "serverType": "IOS",
|
42 | "serverId": 1,
|
43 | "portal": true //指示该节点兼任门户
|
44 | }
|
45 | }
|
46 | }
|
47 | ]
|
48 |
|
49 | ```
|
50 |
|
51 | ## 搭建运行环境
|
52 |
|
53 | 1. 安装系统软件,如已经具备条件请跳过
|
54 |
|
55 | - 安装 mysql 数据库软件,默认排序规则选择 utf8_general_ci
|
56 |
|
57 | - 安装 python@2.7
|
58 |
|
59 | - 安装 git@2.19.1
|
60 |
|
61 | - 安装 node@10.13
|
62 |
|
63 | - 安装 node-gyp
|
64 |
|
65 | ```bash
|
66 | npm i -g node-gyp
|
67 | ```
|
68 |
|
69 | - Windows环境下补充安装
|
70 |
|
71 | ```bash
|
72 | npm i -g --production windows-build-tools
|
73 | ```
|
74 |
|
75 | 2. 下载软件仓库、安装依赖包
|
76 |
|
77 | ```bash
|
78 | git clone https://github.com/bookmansoft/gamecloud
|
79 | cd gamecloud
|
80 | npm i
|
81 | ```
|
82 |
|
83 | 3. 创建并初始化数据库
|
84 |
|
85 | **该项工作在集群的每台数据库服务器上都需要独立执行**
|
86 |
|
87 | **如何快速执行**
|
88 | 如果当前服务器已安装mysql,且用户名密码对为 root / helloworld 时,可直接执行如下指令,并跳过 3.1 3.2 3.3 各步骤
|
89 | ```bash
|
90 | npm run dbinit
|
91 | ```
|
92 |
|
93 | - 3.1 配置数据库连接参数,用于本地数据库的数据迁移流程
|
94 |
|
95 | 修改配置文件 ./config/migrations/gamecloud.json , 修改其中 password 等字段
|
96 |
|
97 | **该配置文件在集群中不同服务器上独立配置**
|
98 | ```json
|
99 | {
|
100 | "dev": {
|
101 | "driver": "mysql",
|
102 | "user": "root",
|
103 | "password": "helloworld",
|
104 | "host": "localhost",
|
105 | "database": "gamecloud",
|
106 | "multipleStatements": true
|
107 | }
|
108 | }
|
109 | ```
|
110 |
|
111 | - 3.2 手动创建数据库,**执行此步骤后请跳过 3.3**
|
112 |
|
113 | - 创建数据库 gamecloud , 建议使用此默认名称,如修改则需相应调整各配置文件
|
114 |
|
115 | - 数据库初始化
|
116 |
|
117 | ```bash
|
118 | npm run commit
|
119 | ```
|
120 |
|
121 | - 3.3 自动创建数据库
|
122 |
|
123 | - 配置数据库连接参数,用于本地数据库的创建流程
|
124 |
|
125 | 修改配置文件 ./config/database.json , 修改其中 password host 字段
|
126 |
|
127 | **该配置文件在集群中不同服务器上独立配置**
|
128 | ```json
|
129 | {
|
130 | "dev": {
|
131 | "driver": "mysql",
|
132 | "user": "root",
|
133 | "password": "helloworld",
|
134 | "host": "localhost"
|
135 | }
|
136 | }
|
137 | ```
|
138 |
|
139 | - 创建并初始化数据库
|
140 |
|
141 | ```bash
|
142 | npm run dbinit
|
143 | ```
|
144 |
|
145 | 特别提醒:为支持存取中文内容,数据库排序规则必须设置为 **utf8-general-ci** 否则在操作中文内容时会引发数据截断错误
|
146 |
|
147 | ## 运行游戏云服务器
|
148 |
|
149 | 1. 配置数据库连接参数,用于各节点的数据库连接串
|
150 |
|
151 | 修改 ./gameconfig.js 文件中 sa pwd host 字段
|
152 |
|
153 | ```js
|
154 | /**
|
155 | * 统一的数据库连接串,如果不同服务器连接不同数据库,需要改写 config 中各个 mysql 字段
|
156 | */
|
157 | let mysql = {
|
158 | "logging" : false, //是否开启日志
|
159 | "db": "gamecloud", //数据库名称
|
160 | "sa": "root", //数据库用户名
|
161 | "pwd": "helloworld", //数据库用户密码
|
162 | "host": "127.0.0.1", //数据库服务器IP地址
|
163 | "port": 3306 //数据库服务器端口号
|
164 | };
|
165 | ```
|
166 |
|
167 | 2. 运行服务器
|
168 |
|
169 | **该步骤使用了 PM2 进程管理软件,一次性启动所有当前服务器上已配置节点**
|
170 | ```bash
|
171 | npm start
|
172 | ```
|
173 |
|
174 | 3. 运行单元测试
|
175 |
|
176 | ```bash
|
177 | npm run test
|
178 | ```
|
179 |
|
180 | 4. 停止游戏云服务器
|
181 |
|
182 | ```bash
|
183 | npm stop
|
184 | ```
|
185 |
|
186 | ## 调试代码
|
187 |
|
188 | 建议使用 vs code 进行代码调试工作,
|
189 |
|
190 | - 在 vs code 中配置 launch.json:
|
191 |
|
192 | ```js
|
193 | {
|
194 | "version": "0.2.0",
|
195 | "configurations": [
|
196 | {
|
197 | "type": "node",
|
198 | "request": "launch",
|
199 | "name": "启动程序",
|
200 | "program": "${workspaceFolder}\\facade\\start.js"
|
201 | }
|
202 | ]
|
203 | }
|
204 | ```
|
205 |
|
206 | - 按下 F5 运行,设置合适的断点
|
207 |
|
208 | - 运行单元测试,触发断点,进入单步跟踪模式
|
209 |
|
210 | ```bash
|
211 | npm run test
|
212 | ```
|
213 |
|
214 | ## 部署网站
|
215 |
|
216 | gamecloud 作为游戏服务端引擎的同时,也可以承担静态网站服务器功能:
|
217 |
|
218 | ```js
|
219 | //在启动节点的同时,设置静态资源映射
|
220 | facade.boot({
|
221 | static: [['/client/', './web/client']],
|
222 | });
|
223 | ```
|
224 |
|
225 | 服务器启动后,可以通过浏览器访问 http://localhost:9901/client 访问工作目录的子目录 web/client 中的静态资源
|
226 |
|
227 | 典型的工作场景为:
|
228 | 1. 架设 gamecloud 作为 JSONP 服务器,并设置静态资源映射. 建议通过基于 gamecloud 的 gamegold-mgr-server 脚手架项目进行二次开发
|
229 | https://github.com/bookmansoft/gamegold-mgr-server
|
230 |
|
231 | 2. 使用 React / AngularJs / VUE / CocosCreator 开发单页面应用,打包并拷贝到已映射目录中,即可对外提供服务
|
232 |
|
233 | ## Roadmap
|
234 |
|
235 | V1.5 和游戏金公链平台无缝整合,一键式开发DAPPS应用
|
236 | V1.6 内置 BTC / BCH / ETH 等主流数字货币的支付接口
|
237 | V2.0 支持 k8s 架构,进一步增强易用性和可伸缩性
|