pomelo install

Pomelo(柚子)是基于Node.js的高性能分布式游戏服务框架,它包含基础的开发框架和相关的扩展组件(库和工具包)。Pomelo不但适用于游戏服务器开发也可以用于开发高实时的Web应用,它的分布式架构使Pomelo比普通实时Web框架性能更好。

安装配置

环境准备

  • 操作系统 Windows10
  • Python版本:2.5~3.0
  • Visual Studio2010

全局安装框架

$ npm i -g pomelo

查看帮助

$ pomelo -h
  用法: pomelo [选项] [命令]
  命令:
    init [path]            创建一个新的应用
    start [options]        开启应用
    list [options]         列出所有的服务器
    add [options]          添加一个新的服务器
    stop [options]         关闭服务器,多个服务器可使用 `pomelo stop server-id-1 server-id-2`
    kill [options]         杀死应用
    restart [options]      重启服务器,多个服务器可使用`pomelo restart server-id-1 server-id-2`
    masterha [options]     开启主从模式下所有的从服务器
    *
  选项:
    -h, --help     输出用法信息
    -V, --version  输出版本号

创建项目

$ cd workspace
$ pomelo init ./test
默认管理员用户:
  账户: admin
  密码: admin
可编辑adminUser.json文件配置管理员用户
请选择底层连接器: 1 websocket(原生 socket), 2 socket.io, 3 wss, 4 socket.io(wss), 5 udp, 6 mqtt: [1]

执行init初始化命令时需选择网络连接方式

启动服务

$ pomelo start -h

  Usage: start [options]

  Options:

    -h, --help                    output usage information
    -e, --env <env>               the used environment
    -D, --daemon                  enable the daemon start
    -d, --directory, <directory>  the code directory
    -t, --type <server-type>,     start server type
    -i, --id <server-id>          start server id

选择环境选项启动

$ pomelo start -e development | production

以守护进程方式启动

$ pomelo start -D

例如:以服务配置config/server.json中配置项为localhost的选项启动服务

$ pomelo start -e localhost
(node:34640) Warning: Accessing non-existent property 'padLevels' of module exports inside circular dependency
(Use `node --trace-warnings ...` to show where the warning was created)
[2022-01-09 12:26:21.130] [INFO] console - mongodb://127.0.0.1:27017/test

[2022-01-09 12:26:21.133] [INFO] console - serverType: master

[2022-01-09 12:26:21.303] [INFO] console - registerAdmin: test

出现警告提示

(node:34640) Warning: Accessing non-existent property 'padLevels' of module exports inside circular dependency
(Use `node --trace-warnings ...` to show where the warning was created)

使用forever start来进行node进程守护程序异常,问题原因 node 版本过高,解决办法使用nvm切换node版本。

$ node -v
v14.0.0

$ nvm list

    16.13.0
    16.0.0
    15.0.0
  * 14.0.0 (Currently using 64-bit executable)
    10.19.0

$ nvm current
v14.0.0

$ nvm use 10.19.0
Now using node v10.19.0 (64-bit)

$ nvm current
v10.19.0

$ pomelo start -e localhost

启动后没输出,查看日志出现错误。

domain ReferenceError: TextEncoder is not defined

在node中引入mongoose, 已经安装了mongoose包的的情况下, node版本太低导致的。使用node --version命令查看当前的node版本。

查看版本支持

$ nvm list available

这里使用12.0.0,安装若失败则重新卸载后再次安装。

$ nvm install 12.0.0
$ nvm use 12.0.0
$ nvm current
$ node -v
'npm' 不是内部或外部命令,也不是可运行的程序或批处理文件。
$ node uninstall 12.0.0

修改源

$ vim nvm/settings.txt
root: D:\Node\NVM
path: D:\Node\NodeJS
node_mirror: https://npm.taobao.org/mirrors/node/
npm_mirror: https://npm.taobao.org/mirrors/npm/

重新启动查看异常日志

domain TypeError: Cannot read property 'collection' of undefined

项目目录结构

目录文件 描述
game-server 游戏服务器,以app.js文件为入口。
shared 前后端、游戏服、Web服共用代码
web-server Web服务器,Express框架搭建,以app.js为入口。

游戏服目录

目录 描述
game-server/app 游戏服应用开发目录,实现不同类型的服务器,添加对应Handler和Remote等。
game-server/config/ 游戏服配置文件目录,配置文件以JSON格式定义。
game-server/logs/ 游戏服日志目录
game-server/app.js 游戏服入口文件

游戏配置文件

配置文件 描述
adminServer.json 服务器类型,若新增服务器类型则需配置token信息,否则显示注册服务器到master失败。
servers.json 服务器配置文件

adminServer.json 文件中的tokan用于将指定类型的服务器注册到master服务器进行统一管理,token可以自定义,或者生成一个足够长的字符串即可,甚至可以多个服务端公用一个token,主要取决于对项目安全性的要求。

Web服目录

目录文件 描述
web-server/bin/ Web服应用保存目录
web-server/public/ Web服静态文件保存路径
web-server/app.js Web服入口文件

安装项目依赖

$ cd test
$ npm-install.bat

安装脚本执行的步骤

$ cd ./game-server && npm install -d
$ cd ./web-server && npm install -d

启动项目

启动项目必须分别启动游戏服和Web服

启动游戏服务器

$ cd game-server && pomelo start

启动命令

$ pomelo start [development|product] [--daemon]
命令参数 描述
development 默认,开发模式
product 产品环境
--deamon 后台运行

后台运行模式--daemon需forever模块支持

$ npm i -g forever 

项目应用启动命令

$ pomelo start -h
  用法: start [选项]
  选项:
    -h, --help                    输出用法信息
    -e, --env <env>               指定环境
    -D, --daemon                  以后台守护进程模式启动
    -d, --directory, <directory>  指定代码目录
    -t, --type <server-type>,     指定服务器类型启动
    -i, --id <server-id>          指定服务器ID启动

启动报错

$ pomelo start
(node:25972) Warning: Accessing non-existent property 'padLevels' of module exports inside circular dependency
(Use `node --trace-warnings ...` to show where the warning was created)

错误原因:Node.js版本过高

$ node -v
v16.13.0

$ pomelo --version
2.2.7

Windows安装NVM

启动Web服务器

$ cd web-server && node app

访问Web服:http://127.0.0.1:3001

查看游戏服务器状态

$ cd test
$ pomelo list
try to connect 127.0.0.1:3005
serverId           serverType pid   rss(M) heapTotal(M) heapUsed(M) uptime(m)
connector-server-1 connector  8288  37.84  21.83        17.02       5.48
master-server-1    master     22696 35.04  19.83        14.88       5.48

游戏服务器状态信息

字段 含义
serverId 服务器编号,从config配置表中的ID。
serverType 服务器类型,同config配置表中的type。
pid 服务器对应的进程PID
rss -
heapTotal 服务器使用堆内存总大小,单位MB。
heapUserd 服务器已使用堆内存大小,单位为兆(MB)。
uptime 服务器启动时长,单位为分钟。

关闭项目

$ pomelo stop --help
  用法: stop [选项]
  选项:
    -h, --help                 打印输出用法信息
    -u, --username <username>  管理员用户的名称
    -p, --password <password>  管理员用户的密码
    -h, --host <master-host>   主服务器主机地址
    -P, --port <master-port>   主服务器端口地址

管理员用户的账号密码保存位置

$ vim game-server/config/adminUser.json
[
  {
    "id": "user-1",
    "username": "admin",
    "password": "admin",
    "level": 1
  },
  
  {
    "id": "user-2",
    "username": "monitor",
    "password": "monitor",
    "level": 2
  },

  {
    "id": "user-3",
    "username": "test",
    "password": "test",
    "level": 2
  }
]

主服务器配置信息位置

$ vim game-server/config/master.json
{
  "development": {
    "id": "master-server-1", "host": "127.0.0.1", "port": 3005
  },
  "production": {
    "id": "master-server-1", "host": "127.0.0.1", "port": 3005
  }
}

关闭指定ID的服务器

$ cd game-server
$ pomelo stop [id]

pomelo stop优雅地关闭各个服务器

  • 前端服务器首先断开连接,阻止新玩家进入游戏,用户体验好。
  • 各个服务器按顺序关闭自身的功能,保证游戏逻辑正常。
  • 玩家状态等信息及时写入数据库,保证数据完整性。

pomelo stop id会关闭指定ID的服务器,关闭特定服务器会导致服务器状态信息等丢失,建议先做好服务器状态信息的维护和备份。

杀死进程

$ cd test
$ pomelo kill [--force]

pomelo kill会直接杀死项目进程,做法比较粗暴,安全性低,开发环境下可以使用,产品环境慎用。若有残留进程杀不干净,可添加--force参数。

动态添加服务器

$ cd test
$ pomelo add  host=[host] port=[port] id=[id] serverType=[serverType]

目前只支持后端服务器的动态添加

交互式命令行 pomelo-cli

pomelo-cli交互式命令行可以对使用Pomelo框架开发的应用和服务进行运维。

pomelo-cli

安装

$ npm i -g pomelo

主机端口

$ vim game-server/config/master.json
{
  "development": {
    "id": "master-server-1", "host": "127.0.0.1", "port": 3005
  },
  "production": {
    "id": "master-server-1", "host": "127.0.0.1", "port": 3005
  }
}

账户密码

$ vim game-server/config/adminUser.json
[
  {
    "id": "user-1",
    "username": "admin",
    "password": "admin",
    "level": 1
  },
  
  {
    "id": "user-2",
    "username": "monitor",
    "password": "monitor",
    "level": 2
  },

  {
    "id": "user-3",
    "username": "test",
    "password": "test",
    "level": 2
  }
]

连接到master管理主机

$ pomelo-cli -h 127.0.0.1 -P 3005 -u monitor -p monitor
try to connect 127.0.0.1:3005
.______     ______   .___  ___.  _______   __         ______
|   _  )   (  __  )  |   \/   | |   ____| |  |       (  __  )
|  |_)  ) |  |  |  | |  \  /  | |  |__    |  |      |  |  |  |
|   ___)  |  |  |  | |   \/   | |   __|   |  |      |  |  |  |
|  |      |  `--'  | |  |  |  | |  |____  |  `----. |  `--'  |
| _|       (______)  |__|  |__| |_______| |_______|  (______)

Welcome to Pomelo interactive client.
Pomelo is a fast, scalable game server framework for node.js.
Type 'help' for more information.

monitor@pomelo : all>

显示所有服务

monitor@pomelo: all> show servers

serverId           serverType host      port pid   heapUsed(M) uptime(m)
chat-server-1      chat       127.0.0.1 5050 764   15.98       1.24
chat-server-2      chat       127.0.0.1 5051 15484 15.99       1.24
chat-server-3      chat       127.0.0.1 5052 28352 15.98       1.24
connector-server-1 connector  127.0.0.1 4050 2284  17.33       1.24
connector-server-2 connector  127.0.0.1 4051 8224  17.34       1.24
connector-server-3 connector  127.0.0.1 4052 9732  17.33       1.24
gate-server-1      gate       127.0.0.1 null 19212 18.70       1.24
master-server-1    master     127.0.0.1 3005 15364 15.85       1.24

切换服务

monitor@pomelo: all> use connector-server-1

switch to server: connector-server-1

显示登录人数

monitor@pomelo: all> show logins

no user logined in this connector

管理控制器

$ apt-get install sysstat

$ git clone https://github.com/NetEase/pomelo-admin-web.git
$ cd pomelo-admin-web
$ npm i -d
$ node app

$ vim config/admin.json
{
    "host": "localhost", 
    "port": 3005,
    "username": "monitor",
    "password": "monitor"
}

Chrome浏览器访问:http://127.0.0.1:7001

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,425评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,058评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,186评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,848评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,249评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,554评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,830评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,536评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,239评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,505评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,004评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,346评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,999评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,060评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,821评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,574评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,480评论 2 267

推荐阅读更多精彩内容