pomelo命令
bin目录:存放pomelo脚本命令
使用#!/usr/bin/env node来表示该文件使用node执行
使用commander模块(https://github.com/tj/commander.js)进行命令的接收以及参数绑定等
init
pomelo init:
- 项目初始化,接收一个参数做为项目根路径,若没有路径,则直接使用当前路径为项目根路径。调用init函数。
init:
- 用户选取connector类型,默认为websocket,数字对应为1-websocket,2-socket.io,3-wss,4-socket.io(wss),5-udp,6-mqtt
- 若当前目录为空,则直接调用createApplicationAt函数,并传入路径和connector类型。若不为空则请求用户许可后新建项目。
- 用户许可使用命令行提示prompt,并用正则表达式确定是否输入y或yes。
createApplicationAt:
- 将template文件夹下的所有文件拷贝到目标路径,并创建game-server/logs和shared文件夹
- 等待1秒的时间保证文件均已拷贝同步完毕
- 根据connector的类型删除冗余文件或文件夹
- init初始化完成
start
pomelo start
- 项目启动命令。设置运行环境,-e或–env、默认为development;设置是否为守护启动,-D为守护;设置启动路径,-d或–directory,默认为当前路径;设置启动的服务器类型,-t或–type;设置启动服务器ID,-i或–id。并调用start函数。
start:
- 根据-d的设置路径,若无,则使用当前路径,合成出app.js的绝对路径
- 若当前文件夹下不存在app.js,则报错退出;若logs文件夹不存在,则创建logs文件夹。
- 合成运行参数,若deamon启动,则另起新的进程启动node app.js,传入运行参数,并设置为detached,丢弃stdio。使用unref使父进程释放子进程引用,之后父进程退出。若非deamon启动,则直接新建子进程来启动node app.js,传入运行参数,并将标准输出流和错误流定向到console输出。
list
pomelo list
- 列出当前启动的服务器。设置用户名,-u或–username,默认为admin;设置密码,-p或–password,默认为admin;设置master服务器的IP,-h或–host,默认为127.0.0.1;设置master服务器的端口号,-P或–port,默认为3005。并调用list函数。
list:
- 设置当前id为pomelo_list_+当前时间戳
- 使用pomelo-admin的adminClient带上id和设置参数连接master服务器。
- 连接成功后发送list请求,并取得当前应用的所有服务器列表。
- 使用服务器的类型和ID对服务器列表进行排序,并组合出每一行的显示内容。
- 使用cliff(https://github.com/flatiron/cliff)对行数据进行格式化输出。
add
pomelo add
- 新添一个服务器。设置用户名,-u或–username,默认为admin;设置密码,-p或–password,默认为amdin;设置master服务器的IP,-h或–host,默认为127.0.0.1;设置master服务器的端口号,-P或–port,默认为3005。
add:
- 设置当前id为pomelo_add_+当前时间戳。
- 使用pomelo-admin的adminClient带上id和设置参数链接master服务器。
- 连接成功后带上args参数发送add请求,并输出结果。
stop & kill
pomelo stop & kill
- 停止服务器或直接杀掉应用。设置用户名,-u或–username,默认为admin;设置密码,-p或–password,默认为amdin;设置master服务器的IP,-h或–host,默认为127.0.0.1;设置master服务器的端口号,-P或–port,默认为3005。
- 其中kill可带force参数,如果具有force参数,则直接在本地使用操作系统命令杀死进程。(注意:无论是Windows还是Linux系统,force kill会杀掉所有的node进程,包括不是pomelo启动的进程)
restart
pomelo restart
- 重启某服务器。设置用户名,-u或–username,默认为admin;设置密码,-p或–password,默认为amdin;设置master服务器的IP,-h或–host,默认为127.0.0.1;设置master服务器的端口号,-P或–port,默认为3005;设置服务器类型,-t或–type;设置服务器ID,-i或–id。然后调用restart函数。
restart:
- 设置当前id为pomelo_restart_+当前时间戳
- 使用pomelo-admin的adminClient带上id和设置参数连接master服务器。
- 连接成功后发送restart请求,带有serverIds数组和type类型,并打印master返回的信息。
masterha
pomelo masterha
- 启动某master服务器的所有slave服务器。设置启动路径,-d或–directory,默认为当前路径。并调用startMasterha函数。
startMasterha:
- 查找config/masterha.json文件,若没有则报错退出。
- 获取masterha配置,并对其中的server逐个进行ranServer操作启动。
runServer:
- 解析server变量中的host信息,根据是否为本地IP,分别调用starter中的localrun和sshrun来运行。
总结
pomelo命令的所有内容如上所示,其中有utils、starter、console等几个辅助工具类还没有细看。但可以看出,在init出的工程中带有用户名和密码设置,是用于登录master服务器使用的,master服务器是用于管理所有其他服务器的中控机,所以需要验证登录。其他的大部分操作、监控服务器都是通过master进行的,这部分需要优先着重阅读。另外需要格外注意不要瞎用pomelo kill -f,这个命令会杀掉所有node进程,这个实现真的是太诡异了。