README
¶
WASM HTTP 服务器命令行工具
工具概述
http_server 是一个命令行工具,用于启动和管理 WASM 插件的 HTTP 服务器。该服务器提供了 RESTful API 接口,支持插件的加载、卸载、执行和状态查询,以及仓库中插件的上传、下载、版本管理和元数据查询。此外,还支持通过 API 生成 WASM 模板。
功能特性
- 插件管理:加载、卸载、执行插件函数、查询插件状态
- 仓库管理:上传、下载、删除插件,管理插件版本和元数据
- WASM 仓库服务:支持 WASM 模块的上传、下载、列表查询、删除、检查等操作
- 静态文件服务:可选的静态文件服务,用于代理前端网站(支持 SPA 模式)
- WASM 模板生成:通过 API 生成 WASM 模块模板
- 健康检查:监控服务器运行状态
- 优雅关闭:支持通过中断信号优雅关闭服务器
安装方法
从源码构建
# 进入项目根目录
cd go-wasm
# 构建 http_server 工具
go build -o http_server ./cmd/http_server
# 运行工具
./http_server
使用方法
基本用法
# 启动服务器,使用默认配置
http_server
# 启动服务器,指定监听端口
http_server -port 9090
# 启动服务器,启用 WASM 仓库服务
http_server -enable-repo
# 启动服务器,启用静态文件服务
http_server -enable-static
# 启动服务器,指定所有参数
http_server -host 0.0.0.0 -port 8080 -plugin-dir ./my-plugins -repo-dir ./my-repo -max-plugins 20 -enable-repo -enable-static
命令行参数
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
-host |
string | "" | HTTP服务器监听地址 |
-port |
int | 8080 | HTTP服务器监听端口 |
-plugin-dir |
string | "./plugins" | 插件存储目录 |
-repo-dir |
string | "./repository" | 仓库存储目录 |
-max-plugins |
int | 10 | 最大插件数量 |
-static-dir |
string | "./web" | 静态文件目录 |
-enable-static |
bool | false | 启用静态文件服务 |
-enable-repo |
bool | false | 启用WASM仓库服务 |
API 接口
服务器启动后,会提供以下 API 接口:
健康检查
GET /health- 健康检查,返回服务器运行状态
插件管理
GET /api/plugins- 获取已加载的插件列表POST /api/plugins- 加载新插件GET /api/plugins/{pluginID}- 获取单个插件信息DELETE /api/plugins/{pluginID}- 卸载插件POST /api/plugins/{pluginID}/execute- 执行插件函数GET /api/plugins/{pluginID}/status- 获取插件状态
仓库管理
GET /api/repository/plugins- 获取仓库中的插件列表POST /api/repository/plugins- 上传插件到仓库GET /api/repository/plugins/{pluginName}- 下载仓库中的插件DELETE /api/repository/plugins/{pluginName}- 删除仓库中的插件GET /api/repository/plugins/{pluginName}/versions- 获取插件的版本列表GET /api/repository/plugins/{pluginName}/metadata- 获取插件的元数据
WASM 模板生成
POST /api/wasm/template- 生成 WASM 模板,支持 JSON 请求体或上传 JSON 文件
WASM 仓库服务(需要 -enable-repo)
POST /api/wasm/upload- 上传 WASM 模块GET /api/wasm/download/{moduleID}- 下载 WASM 模块GET /api/wasm/list- 列出所有 WASM 模块(可通过 ?name=xxx 过滤)GET /api/wasm/info/{moduleID}- 获取 WASM 模块信息DELETE /api/wasm/delete/{moduleID}- 删除 WASM 模块GET /api/wasm/check/{moduleID}- 检查 WASM 模块是否存在GET /api/wasm/health- WASM 仓库健康检查
静态文件服务(需要 -enable-static)
GET /- 静态文件服务(SPA 模式下所有路由返回 index.html)GET /*- 静态文件服务
WASM 仓库服务使用示例
上传模块
curl -X POST http://localhost:8080/api/wasm/upload \
-F "name=my-module" \
-F "version=1.0.0" \
-F "description=My awesome module" \
-F "metadata={\"author\":\"John Doe\",\"tags\":\"math\"}" \
-F "[email protected]"
下载模块
curl -O -J http://localhost:8080/api/wasm/download/[email protected]
列出所有模块
curl http://localhost:8080/api/wasm/list
获取模块信息
curl http://localhost:8080/api/wasm/info/[email protected]
删除模块
curl -X DELETE http://localhost:8080/api/wasm/delete/[email protected]
检查模块是否存在
curl http://localhost:8080/api/wasm/check/[email protected]
WASM 仓库健康检查
curl http://localhost:8080/api/wasm/health
配置示例
示例 1:使用默认配置
http_server
这将启动一个监听在 :8080 的服务器,使用默认的插件目录 ./plugins 和仓库目录 ./repository,最大插件数量为 10。
示例 2:启用 WASM 仓库服务
http_server -enable-repo
这将启动服务器并启用 WASM 仓库服务,可以通过 REST API 上传、下载和管理 WASM 模块。
示例 3:启用静态文件服务
http_server -enable-static -static-dir ./web
这将启动服务器并启用静态文件服务,用于代理前端网站(支持 SPA 模式)。
示例 4:启用所有功能
http_server -port 8080 -plugin-dir ./plugins -repo-dir ./repository -enable-repo -enable-static
这将启动一个功能完整的服务器,包括插件管理、仓库管理、WASM 仓库服务和静态文件服务。
示例 5:指定监听地址
http_server -host 127.0.0.1 -port 8080
这将启动一个只监听在本地地址 127.0.0.1:8080 的服务器,外部无法访问。
日志输出
服务器启动时会输出以下日志信息:
2026/02/26 18:00:00 启动 WASM HTTP 服务器...
2026/02/26 18:00:00 监听地址: :8080
2026/02/26 18:00:00 插件目录: ./plugins
2026/02/26 18:00:00 仓库目录: ./repository
2026/02/26 18:00:00 最大插件数量: 10
2026/02/26 18:00:00 静态文件目录: ./web (如果启用)
2026/02/26 18:00:00 WASM仓库服务: 已启用 (如果启用)
2026/02/26 18:00:00 WASM仓库已就绪,当前模块数: 0 (如果启用)
2026/02/26 18:00:00 静态文件服务器已就绪 (如果启用)
2026/02/26 18:00:00 HTTP服务器启动,监听 :8080
优雅关闭
当按下 Ctrl+C 或发送 SIGINT/SIGTERM 信号时,服务器会优雅关闭:
2026/02/25 18:05:00 正在关闭服务器...
2026/02/25 18:05:00 停止HTTP服务器...
2026/02/25 18:05:00 HTTP服务器已停止
2026/02/25 18:05:00 服务器已优雅关闭
依赖关系
- plugin 包:提供插件管理功能
- repository 包:提供仓库管理功能
- http 包:提供 HTTP 服务器功能
- wasm_repo 包:提供 WASM 仓库服务功能
- static_server 包:提供静态文件服务功能
- 标准库:flag, log, os, signal 等
注意事项
- 目录权限:确保插件目录和仓库目录有适当的读写权限
- 端口占用:确保指定的端口没有被其他进程占用
- 插件数量:根据系统资源合理设置最大插件数量
- 文件大小:上传大插件时可能会消耗较多内存
故障排除
端口被占用
如果出现端口被占用的错误:
启动 HTTP 服务器失败: listen tcp :8080: bind: address already in use
可以使用 -port 参数指定一个未被占用的端口:
http_server -port 9090
目录不存在
如果插件目录或仓库目录不存在,服务器会自动创建这些目录。
插件加载失败
如果插件加载失败,可能是因为插件文件格式不正确或依赖项缺失。请检查插件文件的完整性和格式。
版本历史
| 版本 | 日期 | 描述 |
|---|---|---|
| 1.1.0 | 2026-02-26 | 新增 WASM 仓库服务和静态文件服务 |
| 1.0.0 | 2026-02-25 | 初始版本,实现了基本的 HTTP 服务器和 API 接口 |
Documentation
¶
There is no documentation for this package.
Click to show internal directories.
Click to hide internal directories.