编辑器服务
WIKI 接入新页面节点类型插件的编辑器服务开发分为三步:
- 独立应用开发
- 添加 WIKI 新页面类型插槽
- 添加托管独立应用能力
独立应用开发
第一步:编写独立应用管理脚本
例如,独立应用可执行程序名字为:GrapeCityServer
workspace/start.sh
#!/bin/bash
usage() {
echo -e "Usage: $(basename $0) [options]"
echo -e " 启动"
exit 1
}
# 处理启动服务
start() {
echo "/usr/bin/nohup ./GrapeCityServer --port=$PARAMS_PORT --args=$ARGS >/dev/null 2>&1 &"
/usr/bin/nohup ./GrapeCityServer --port=$PARAMS_PORT --args=$ARGS > nohup.out 2>&1 &
}
# 处理停止服务
stop() {
# 这里的 pid.txt 必 须和服务内部保持一致
echo "kill -9 $(cat pid.txt)"
kill -9 "$(cat pid.txt)"
}
parse_config() {
for arg in ${ARGS}
do
case ${arg} in
--port=*)
PARAMS_PORT=${arg#*=}
;;
--path=*)
PATH=${arg#*=}
;;
--args=*)
ARGS=${arg#*=}
;;
esac
done
}
ARGS="$@"
# 申明指令!!!(这里是入口)
parse_config
case $1 in
help) usage;;
start) start;;
stop) stop;;
*) usage;;
esac
第二步:按照独立应用程序编写
//Goland
package main
var (
port int
args string
)
func initFlags() {
flag.IntVar(&port, "port", 18000, "service port")
flag.StringVar(&args, "args", "", "service other parameters")
flag.Parse()
parse_other_args()
}
func parse_other_args() {
//将传入的args字符串按照规范进行解析,规范可自定义,但在设计中args字符串中不可有空白符
}
//独立应用保存进程PID
func savePid() {
pid := os.Getpid()
log.Infof("process PID: %d \n", pid)
err := os.WriteFile("./pid.txt", []byte(strconv.Itoa(pid)), 0644)
if err != nil {
log.Fatalf("Logging PID failed: %+v", err)
}
}
func main() {
//解析参数
initFlags()
savePid()
//...
//启动web service
addr := fmt.Sprintf("%s:%d", "localhost", port)
// router.Run 函数可参见步骤3
err := router.Run(addr)
if err != nil {
log.Fatal("start service fail")
}
}