Files
netease-modsdk-wiki/docs/mcdocs/2-Apollo/4-SDK/9-运营指令.md
2025-03-18 14:46:12 +08:00

825 lines
24 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 运营指令
- 使用方法
```
post url: http:masterip:masterport/baseurl
post body:
json格式例如
{
"serverId":3,
"ip":"192.168.43.170",
"port":12001,
"masterPort":12002,
"type":"lobby"
}
response:
json格式格式:
{
"code":1, #1是成功2是失败
"message":"reason",#若是失败,则介绍失败原因
"entity":content #详细信息
}
```
开发者可以登录到master所在机器用curl命令发请求使用方式如下
```
curl -X POST http://masterip:masterport/baseurl -d 'postbody'
```
若通过"/online-num/query"指令获取game在线人数则可以在master上发送如下curl命令
```
curl -X POST http://11.11.11.11:8503/online-num/query -d '{"server_type":"game"}'
```
若需要使用商城插件neteaseShop中查询订单运营指令/check-single-order指令则可以在master上发送如下curl命令
```
curl -X POST http://11.11.11.11:8503/check-single-order -d '{"orderid" : 1234,"uid" : 123456789}'
```
## 查询UID
* **/netease/get-online-uids**
- 描述
查询当前在线玩家的uid
- 无post body json参数
- response entity参数
dict。key是服务器idvalue是在线玩家uid列表当对应服务器中不存在玩家时服务器id不会作为key出现
- 示例:
```
post url: http://111.222.333.444:1101/netease/get-online-uids
post body:
{
}
response:
{
"code": 0,
"message": "",
"entity": {
"4000":[1989540401,2147585444]
}
}
```
* **/netease/get-lazy-uids**
- 描述
查询最近请求登录玩家的uid以及请求登录时间
- 无post body json参数
- response entity参数
list(string)。每条记录上有uid和对应请求登录的时间按照登录请求时间远近排序越近越在前;最多30条
- 示例:
```
post url: http://111.222.333.444:1101/netease/get-lazy-uids
post body:
{
}
response:
{
"code": 0,
"message": "",
"entity": {
"uid=680116908 login=2021-05-26 15:12:41",
"uid=1989540401 login=2021-05-26 15:12:08",
"uid=2147585444 login=2021-05-26 15:11:24"
}
}
```
## 在线人数
* **/netease/update-player-online-limit**
- 描述
修改全局最高同时在线人数限制
- post body 参数
| 关键字 | 数据类型 | 说明 |
| ---------- | -------- | ------------ |
| online_limit | int | 需要设置的最高同时在线人数当设置为0时代表不限制最高同时在线|
- response entity参数
| 关键字 | 数据类型 | 说明 |
| ---------- | -------- | ------------ |
| code | int | 整个指令的返回码1为成功其他数字为失败|
| message | str | 整个指令的返回结果描述,一般成功时会空,失败时会描述失败原因|
| entity | dict | 关键字version为当前配置文件中全局同时在线人数限制的版本号暂时无用关键字old_online_limit为修改前全局最高同时在线人数的限制返回0代表修改前没有限制最高同时在线|
- 示例:
```
post url: http://111.222.333.444:1101/netease/update-player-online-limit
post body:
{
"online_limit":8000
}
response:
{
"code": 1,
"entity": {
"version": 0,
"old_online_limit": 6000
},
"message": ""
}
```
* **/online-num/query**
- 描述
获取proxy/lobby/game在线人数或获取总在线人数。
- post body 参数
| 关键字 | 数据类型 | 说明 |
| ---------- | -------- | ------------ |
| serverType | str | 服务器类型,比如"lobby","game""proxy",若不传入该值,则表示总在线人数|
- response entity参数
| 关键字 | 数据类型 | 说明 |
| ---------- | -------- | ------------ |
| onlineNum | int | 在线人数|
- 示例:
```
post url: http://111.222.333.444:1101/online-num/query
post body:
{
"serverType":"game"
}
response:
{
"code": 1,
"entity": {
"onlineNum": 0
},
"message": ""
}
```
* **/online-num/query-by-server-id**
- 描述
获取某个proxy/game/lobby在线人数
- post body参数
| 关键字 | 数据类型 | 说明 |
| ---------- | -------- | ------------ |
| serverId | int | 服务器id|
- response entity参数
| 关键字 | 数据类型 | 说明 |
| ---------- | -------- | ------------ |
| onlineNum | int | 在线人数|
- 示例:
```
post url: http://111.222.333.444:1101/online-num/query-by-server-id
post body:
{
"serverId":1
}
response:
{
"code": 1,
"entity": {
"onlineNum": 2
},
"message": ""
}
```
## 日志等级
* **/conf/set-log-debug-level**
- 描述
开服工具日志等级设置为debug或info level等级
- post body 参数
| 关键字 | 数据类型 | 说明 |
| ---------- | -------- | ------------ |
| debugLevel | bool | true:则日志设置为debug log levelfalse日志设置为info log level |
- 无response entity参数
- 示例:
```
post url: http://111.222.333.444:1101/conf/set-log-debug-level
post body:
{
"debugLevel":false
}
response:
{
"code": 1,
"entity": null,
"message": ""
}
```
* **/conf/set-server-log-debug-level**
- 描述
设置某个服务器的日志等级。
- post body 参数
| 关键字 | 数据类型 | 说明 |
| ---------- | -------- | ------------ |
| serverId | int | 服务器id。可以是proxy、lobby、game、service的serverid。若为0则表示master。|
| debugLevel | bool | true:则日志设置为debug log levelfalse日志设置为info log level |
- 无response entity参数
- 示例:
```
post url: http://111.222.333.444:1101/conf/set-server-log-debug-level
post body:
{
"serverId":1,
"debugLevel":false
}
response:
{
"code": 1,
"entity": null,
"message": ""
}
```
## 服务器
* **/query-all-server-status**
- 描述
查询所有服务器状态
- 无post body json参数
- response entity参数
dict。key是服务器idvalue是服务器状态。服务器状态有
1:断开连接状态
2:已连接状态
3:关服状态
4:优雅关服状态
6, 滚动更新中间状态即将转换到状态7
7 也是滚动更新中间状态即将转换到状态1或2
- 示例:
```
post url: http://111.222.333.444:1101/query-all-server-status
post body:
{
}
response:
{
"code": 1,
"entity": {
"1": 1,
"2": 1
}
"message": ""
}
```
* **/query-one-server-status**
- 描述
查询某个服务器状态
- post body 参数
| 关键字 | 数据类型 | 说明 |
| ---------- | -------- | ------------ |
| serverId | int | proxy/lobby/game服务器id |
- response entity参数
| 关键字 | 数据类型 | 说明 |
| ---------- | -------- | ------------ |
| status | int | 服务器状态。服务器状态有:服务器状态如下:<br/> 1:断开连接状态<br/> 2:已连接状态<br/> 3:关服状态<br/> 4:优雅关服状态<br/> 6, 滚动更新中间状态即将转换到状态7<br/> 7 也是滚动更新中间状态即将转换到状态1或2 |
- 示例:
```
post url: http://111.222.333.444:1101/query-one-server-status
post body:
{
"serverId":1
}
response:
{
"message": "",
"code": 1,
"entity": {
"status": 1
}
}
```
## 禁言,解除禁言
* **/silent**
- 描述
禁言某个玩家
- post body json参数
| 关键字 | 数据类型| 说明 |
| ------------ | -----------| ------------ |
| uid |int | 玩家id |
| banTime |int | 禁言时间,单位为秒,-1表示永封|
| reason |str | 禁言原因|
| type |str | 禁言类型,可自定义,公屏禁言为`Commom`|
- 无response entity参数
- 示例:
```
post url: http://111.222.333.444:1101/silent
post body:
{
"uid":11111,
"banTime":40,
"reason":"玩家作弊",
"type":"Common"
}
response:
{
"code": 1,
"entity": null,
"message": ""
}
```
* **/unban-silent**
- 描述
解除某个玩家的禁言
- post body json参数
| 关键字 | 数据类型| 说明 |
| ------------ | -----------| ------------ |
| uid |int | 解除禁言玩家的uid|
| type |str | 禁言类型,可自定义,公屏禁言为`Commom`|
- 无response entity参数
- 示例:
```
post url: http://111.222.333.444:1101/unban-silent
post body:
{
"uid":11111,
"type":"Commom"
}
response:
{
"code": 1,
"entity": null,
"message": ""
}
```
* **/global-silent**
- 描述
全局公屏禁言开关
- post body json参数
| 关键字 | 数据类型| 说明 |
| ------------ | -----------| ------------ |
| isSilent |bool | 全局禁言开关,`true`表示开启全局禁言,`false`表示关闭全局禁言|
| reason |str | 禁言原因|
- 无response entity参数
- 示例:
```
post url: http://111.222.333.444:1101/global-silent
post body:
{
"isSilent":true,
"reason":"系统维护"
}
response:
{
"code": 1,
"entity": null,
"message": ""
}
```
## 踢出玩家
* **/kickout-user**
- 描述
把某个玩家从游戏中踢出
- post body json参数
| 关键字 | 数据类型| 说明 |
| ------------ | -----------| ------------ |
| uid |int | 被踢出玩家的uid|
| reason |str | 踢出原因|
- 无response entity参数
- 示例:
```
post url: http://111.222.333.444:1101/kickout-user
post body:
{
"uid":11111,
"reason":"玩家作弊",
}
response:
{
"code": 1,
"entity": null,
"message": ""
}
```
## 封禁,解除封禁
* **/ban-user**
- 描述
封禁某个玩家
- post body json参数
| 关键字 | 数据类型| 说明 |
| ------------ | -----------| ------------ |
| uid |int | 封禁玩家的uid|
| banTime |int | 封禁时间,单位为秒,-1表示永封|
| reason |str | 封禁原因|
| bCombineReason |bool | 是否组合显示封禁原因。若为True则按备注说明处理否则被封禁玩家登陆会提示【reason】|
- 无response entity参数
- 示例:
```
post url: http://111.222.333.444:1101/ban-user
post body:
{
"uid":11111,
"banTime":40,
"reason":"玩家作弊",
}
response:
{
"code": 1,
"entity": null,
"message": ""
}
```
- 备注
若banTime>0则被封禁玩家登陆提示您的账号已经被封禁剩余封禁时间x天y小时z分封禁原因【reason】。如有疑问请前往客服专区反馈
若banTime=-1则被封禁玩家登陆提示您的账号已经被永久封禁封禁原因【reason】。如有疑问请前往客服专区反馈
* **/unban-user**
- 描述
解除某个玩家的封禁
- post body json参数
| 关键字 | 数据类型| 说明 |
| ------------ | -----------| ------------ |
| uid |uint32 | 解除封禁玩家的uid|
- 无response entity参数
- 示例:
```
post url: http://111.222.333.444:1101/unban-user
post body:
{
"uid":11111,
}
response:
{
"code": 1,
"entity": null,
"message": ""
}
```
## 强制解除玩家在线标识
* **/netease/release-online-lock**
- 描述
强制解除指定UID玩家的在线标识
- post body json参数
| 关键字 | 数据类型| 说明 |
| ------------ | -----------| ------------ |
| uidList |list(int) | 需要解除在线标识的玩家的UID列表|
- response entity参数
| 关键字 | 数据类型 | 说明 |
| ---------- | -------- | ------------ |
| sucUids | list(int) | 成功解除玩家在线标识的UID列表包括请求时已经不在线的|
| failUids | list(int) | 解除玩家在线标识失败的UID列表|
- 示例:
```
post url: http://111.222.333.444:1101/netease/release-online-lock
post body:
{
"uidList":[2147585444,2819362897],
}
response:
{
"code": 1,
"message": "",
"entity": {
"sucUids": [2147585444,2819362897],
"failUids": []
}
}
```
* **/netease/release-online-lock-by-server**
- 描述
强制解除指定ID服务器当前在线玩家的在线标识
- post body json参数
| 关键字 | 数据类型| 说明 |
| ------------ | -----------| ------------ |
| serverId |list(int) | 需要解除在线标识的服务器ID|
- response entity参数
| 关键字 | 数据类型 | 说明 |
| ---------- | -------- | ------------ |
| sucUids | list(int) | 成功解除玩家在线标识的UID列表|
| failUids | list(int) | 解除玩家在线标识的UID列表|
- 示例:
```
post url: http://111.222.333.444:1101/netease/release-online-lock-by-server
post body:
{
"serverId": 4000,
}
response:
{
"code": 1,
"message": "",
"entity": {
"sucUids": [2147585444,2819362897],
"failUids": []
}
}
```
## 停服维护
* **/invalid-all-servers**
- 描述
开启/关闭停服维护
- post body json参数
| 关键字 | 数据类型| 说明 |
| ------------ | -----------| ------------ |
| invalid |bool | 停服维护开关,`true`表示开启停服维护,`false`表示关闭停服维护|
| reason |str | 停服维护原因|
- 无response entity参数
- 示例:
```
post url: http://111.222.333.444:1101/invalid-all-servers
post body:
{
"invalid":true,
"reason":"停服维护",
}
response:
{
"code": 1,
"entity": null,
"message": ""
}
```
## Hunter调试命令
* **/netease/hunter-debug**
- 描述
使目的服务器执行Python脚本脚本中使用**print**打印的信息会体现在请求返回中,同时,也会打印到目的服务器的日志文件中,具体是"hunterDebug exec"日志的下面n行日志。
- post body json参数
| 关键字 | 数据类型| 说明 |
| ------------ | -----------| ------------ |
| opServerIds |list(int) |可选参数需要执行python脚本的服务器ID列表0表示为master|
| opServerType |str |可选参数需要执行python脚本的服务器类型列表|
| script |str | 服务器需要执行的python脚本用`\n`换行|
| command |str | 服务器需要执行的控制台命令|
- response entity参数
dict。key是服务器idvalue也是一个dict有两个keycode和message
code=0代表在对应服务器上执行脚本成功此时message中的信息为脚本中**print**打印的信息;
code=1代表在对应服务器上执行脚本失败此时message中的信息为失败的原因
- 示例:
```
post url: http://111.222.333.444:1101/netease/hunter-debug
post body:
{
"opServerIds": [0,8000,4000,6000],
"script":"import time\nprint time.time()"
}
response:
{
"code": 0,
"message": "",
"entity": {
"0": {"message": "1623327430.98\n", "code": 0},
"4000": {"message": "1623327431.04\n", "code": 0},
"6000": {"message": "1623327431.04\n", "code": 0},
"8000": {"message": "1623327431.04\n", "code": 0}
}
}
对应服务器日志文件中包含下面日志:
[2019-06-03 10:21:29 INFO] Python:hunterDebug exec
[2019-06-03 10:21:29 INFO] Python:1559543269.12
```
* **/hunter-debug**
- 描述
使目的服务器执行Python脚本其结果打印到目的服务器的日志文件中具体是"hunterDebug exec"日志的下面n行日志。
- post body json参数
| 关键字 | 数据类型| 说明 |
| ------------ | -----------| ------------ |
| serverId |int |服务器对应ID0表示为master|
| script |str | 服务器需要执行的python脚本用`\n`换行|
| command |str | 服务器需要执行的控制台命令|
- 无response entity参数
- 示例:
```
post url: http://111.222.333.444:1101/hunter-debug
post body:
{
"serverId":101,
"script":"import time\nprint time.time()"
}
response:
{
"code": 1,
"entity": null,
"message": ""
}
101服务器日志文件中包含下面日志
[2019-06-03 10:21:29 INFO] Python:hunterDebug exec
[2019-06-03 10:21:29 INFO] Python:1559543269.12
```
## 性能分析
* **/check-memory-run**
- 描述
检查服务器脚本层内存泄漏。需要执行两次指令第一次生成快照第二次生成同第一次的diff。
- post body json参数
| 关键字 | 数据类型| 说明 |
| ------------ | -----------| ------------ |
| serverId |int ||
| useList |list | 通常是 ["tracemalloc", "objreport"]|
| objNames |list | 通常是空|
- 无response entity参数
- 示例:
```
post url: http://111.222.333.444:1101/check-memory-run
post body:
{
"serverId":101,
"useList":["tracemalloc", "objreport"],
"objNames":[]
}
response:
{
"code": 1,
"entity": null,
"message": ""
}
服务器日志文件包含下面日志:
[2019-09-11 17:09:33 INFO] Python:run_tracemalloc traceback
[2019-09-11 17:09:33 INFO] Python:[ Top 10 differences ]
[2019-09-11 17:09:33 INFO] Python:/tmp/tmpxlycSu/scripts/mod/server/memory/obj_report.py:43: size=12.0 KiB (+12.0 KiB), count=1 (+1), average=12.0 KiB
[2019-09-11 17:09:33 INFO] Python:/tmp/tmpxlycSu/scripts/mod/server/memory/obj_report.py:45: size=10.0 KiB (+10.0 KiB), count=11 (+11), average=992 B
[2019-09-11 17:09:33 INFO] Python:/tmp/tmpxlycSu/scripts/mod/server/memory/check_memory.py:61: size=10.0 KiB (+10.0 KiB), count=127 (+127), average=84 B
[2019-09-11 17:09:33 INFO] Python:/tmp/tmpxlycSu/scripts/mod/server/memory/obj_report.py:12: size=1736 B (+1736 B), count=6 (+6), average=289 B
[2019-09-11 17:09:33 INFO] Python:/tmp/tmpxlycSu/scripts/mod/server/memory/obj_report.py:6: size=1007 B (+1007 B), count=5 (+5), average=201 B
[2019-09-11 17:09:33 INFO] Python:/usr/local/lib/python2.7/site-packages/tracemalloc.py:380: size=864 B (+864 B), count=4 (+4), average=216 B
[2019-09-11 17:09:33 INFO] Python:/usr/local/lib/python2.7/json/decoder.py:380: size=704 B (+704 B), count=11 (+11), average=64 B
[2019-09-11 17:09:33 INFO] Python:/usr/local/lib/python2.7/site-packages/tracemalloc.py:518: size=672 B (+672 B), count=4 (+4), average=168 B
[2019-09-11 17:09:33 INFO] Python:<unknown>:0: size=650 B (+650 B), count=2 (+2), average=325 B
[2019-09-11 17:09:33 INFO] Python:/tmp/tmpxlycSu/scripts/mod/server/memory/check_memory.py:66: size=544 B (+544 B), count=1 (+1), average=544 B
[2019-09-11 17:09:33 INFO] Python:[QA] [DIFF_MORE]
[2019-09-11 17:09:33 INFO] Python:[QA] [DIFF_LESS]
[2019-09-11 17:09:33 INFO] Python:-2 <type 'tuple'>
日志说明,打印了两次【/check-memory】间内存变化前十的文件两次指令间减少了2个tuple的实例。
```
* **/profile**
- 描述
用于测量python函数占用cpu时间。需要执行两次指令第一次开始profile第二次生成性能数据文件。性能数据文件放到执行文件所在目录下的profile子目录中。性能数据文件名的格式profile+生成文件的时间戳
- post body json参数
| 关键字 | 数据类型| 说明 |
| ------------ | -----------| ------------ |
| serverId |int ||服务器对应ID。0表示为master-1表示所有服务器其他表示lobby/game/service的服务器ID|
| bBegin |bool |true开始profilefalse完成profile|
- 无response entity参数
- 示例:
```
性能数据文件名profile_1574325974
文件内容:
33 function calls in 0.000 seconds
Ordered by: internal time
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.000 0.000 {_log.logInfo}
2 0.000 0.000 0.000 0.000 logout.py:83(write)
1 0.000 0.000 0.000 0.000 logout.py:62(split_and_log)
1 0.000 0.000 0.000 0.000 netServerApp.py:17(TickApp)
1 0.000 0.000 0.000 0.000 Queue.py:93(empty)
1 0.000 0.000 0.000 0.000 timer.py:72(scheduler)
1 0.000 0.000 0.000 0.000 idvScript.modMaster.httpHandlerSys:141(Update)
1 0.000 0.000 0.000 0.000 async_task_pool.py:293(schedule)
1 0.000 0.000 0.000 0.000 netgameApp.py:3(Tick)
1 0.000 0.000 0.000 0.000 async_task_pool.py:302(exec_callback)
2 0.000 0.000 0.000 0.000 {len}
1 0.000 0.000 0.000 0.000 baseApp.py:73(ClearNeedsUpdate)
5 0.000 0.000 0.000 0.000 {method 'has_key' of 'dict' objects}
1 0.000 0.000 0.000 0.000 {time.time}
1 0.000 0.000 0.000 0.000 {method 'acquire' of 'thread.lock' objects}
1 0.000 0.000 0.000 0.000 {method 'replace' of 'str' objects}
2 0.000 0.000 0.000 0.000 {method 'splitlines' of 'str' objects}
1 0.000 0.000 0.000 0.000 mongopool.py:194(tick)
1 0.000 0.000 0.000 0.000 redispool.py:274(do_tick)
1 0.000 0.000 0.000 0.000 Queue.py:200(_qsize)
1 0.000 0.000 0.000 0.000 memoryScripts.MasterMemorySys:21(Update)
1 0.000 0.000 0.000 0.000 {method 'release' of 'thread.lock' objects}
1 0.000 0.000 0.000 0.000 redispool.py:271(tick)
3 0.000 0.000 0.000 0.000 baseSystem.py:86(Update)
内容解读:
第一行33个函数调用被监控这些函数占用cpu总运行时间为0.000秒
接下来输出个字段含义:
ncalls表示函数调用的次数
tottime表示指定函数的总的运行时间除掉函数中调用子函数的运行时间
percall第一个percall等于 tottime/ncalls
cumtime表示该函数及其所有子函数的调用运行的时间即函数开始调用到返回的时间
percall第二个percall即函数运行一次的平均时间等于 cumtime/ncalls
filename:lineno(function):每个函数调用的具体信息;
```