开发工具

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", // ... }