开发工具

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