【Pomelo源码分析】2016-09-20 入门(pomelo命令)

魏硕
2023-12-01

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进程,这个实现真的是太诡异了。

 类似资料: