开发工具
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的预处理器
以上目录结构对应的配置(局部)如下:
{
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",
// ...
}