开发工具
Sublime Text
- https://www.sublimetext.com/3
- 下载并安装
- 将一个.z1h后缀名的文件拖拽进Sublimt Text面板
- 在上方菜单栏选择
View > Syntax > Open all with current... > JavaScript > JavaScript
运行配置
通过命令行 z1h -conf 配置文件 即可应用配置启动Z1h, 配置文件为可以为 z1h代码(兼容json格式)
解压.zip文件后, 会看到一个conf.json文件, 运行z1h -conf conf.json试试
字段解释
|字段名|类型|含义|缺省值|示例| |:—–|:-:|:-:|:-:|:-:| dir|string|数据目录|datas|/data/z1h/ key|string|关键密码,用于更新前端|-|- serverless|object|http服务路由等配置项|-|- |-api|object|运行http服务的api相关配置 |-api-|-router|string|路由地址 |-api-|-dir|string|本地目录地址 |-socket|结构同api|web socket服务配置 |-tcp|结构同api|tcp监听服务配置 |-tcp-|-port|运行端口号|-|30031 |-tcp-|-file|运行的z1h文件|-|30031 |-udp|结构同tcp|udp监听服务配置 |-expire|int|z1h文件的缓存时长,单位秒|1 |-statics|array|静态文件服务 |-statics[..]|结构同api |-interval|string|运行循环/定时任务的目录 log|string|日志文件名|-|- db|object|数据库信息|-|- |-type|string|数据库类型|mysql|mysql/sqlite3 |-address|string|数据库地址|-|- dbs|array|多个数据库/主从|-|- |-dbs[..]|结构同db dbGroup|bool|是否开启数据库组(读写分离)|false|- redis|object|Redis信息|-|- |-address|string|Redis地址 |-password|string|密码 |-select|int|Redis库 repl|object|交互配置|-|- |-terminal|bool|是否在命令行开启交互|false |-web|object|Web交互的配置 |-web-|-router|string|Web交互的url地址 |-web-|-users|[][2]string|Web交互的帐号密码列表|-|[["un1","pwd1"],["un2","pwd2"]] |-web-|-checker|func(un,pwd,request)(store/error)|Web交互的帐号密码检查方法|-|(un,pwd)=>{return un=='admin'&&pwd=='hi'} |-web-|-prepare|map[string]string|用户在鉴权时先执行的代码|-| |-web-|-preprocess|map|用户在每次执行代码时进行代码处理|-| initFiles|array|初始化运行的文件路径列表|-|- port|-|运行端口号|-|30030 noFront|bool|是否关闭前端服务|false|- extra|-|额外配置|-|-
示例
port = 30030 // 声明到全局变量的, 将成为Z1h运行环境变量
print(`端口为${port}`)
{
"dir": "datas",
// "key": "xxxxxxx.",
"log": "datas/log/log",
"port": 30030, // 可以用第一行定义的port
"db": {
"type": "mysql",
"address": "username:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4,utf8"
},
"initFiles": ["datas/init.z1h"],
"serverless":
{
"api":
{
"router": "/api",
"dir": "datas/api"
},
"socket":
{
"router": "/socket",
"dir": "datas/socket"
},
"interval": "datas/interval",
"tcp":
{
"port": 30031,
"file": "datas/tcp.z1h"
},
"udp":
{
"port": 30031,
"file": "datas/udp.z1h"
},
},
"noFront": true,
"repl":
{
"web":
{
"router": "/z1h",
"users": [
// ["xxx", "xxxxx."]
]
}
}
}
目录结构
一个典型的z1h服务的文件目录结构如下
├── z1h // z1h可执行文件
├── conf.z1h // 配置文件
└── datas // 数据目录
├── inits // 依赖代码目录
│ ├── at.z1h // 依赖代码,在进程启动时执行,且全局变量会保留到整个运行环境
├── interval // 定时任务目录
│ ├── clean.1800000.z1h // 每1800000毫秒执行一次(执行时阻塞计时)
│ ├── notify.0_10c30_Q_Q_Q_Q_Q.z1h // cron规则执行(执行与计时并行,不阻塞)
├── api // 接口目录
│ ├── hi.z1h // 可通过/api/hi访问
│ ├── 404.z1h // 处理任何/api/...访问
│ ├── user // api路由目录
│ │ └── login.z1h // 可通过/api/user/login访问
├── socket // Websocket连接处理目录
│ ├── hi.z1h // 可通过ws://.../socket/hi连接
│ ├── user // Websocket连接路由目录
│ │ └── subscribe.z1h // 可通过ws://.../socket/user/subscribe连接
├── assets // 资源目录
│ ├── logo.png // 静态资源文件,可通过/assets/logo.png访问
├── log // 日志目录
│ └── log.2021.08.13 // 某天的日志文件
└── prepare.z1h // 请求api的预处理器
以上目录结构对应的配置(局部)如下:
conf.z1h
{
dir: "datas",
initFiles: ["datas/inits"],
serverless: {
interval: "datas/interval",
api: {
router: "/api",
dir: "datas/api"
},
socket: {
router: "/socket",
dir: "datas/socket"
},
prepare: "datas/prepare.z1h"
},
log: "datas/log/log",
// ...
}