外观
Worker 传输
独立 Python 与 Go 插件可以使用标准输入输出、本机 Unix socket 或本机 TCP 回环连接。传输方式只改变 Host 与插件的通信通道,不增加权限,也不改变持久操作、事件 ACK 或生命周期规则。驻留 Lua 模块在 Host 内运行,不使用独立 socket Worker。
选择通道
transport | 系统 | 使用方式 |
|---|---|---|
不填写或 stdio | Linux、Windows、macOS | 默认。标准输出只写协议帧;日志写标准错误。 |
unix | Linux、macOS | Host 为这一代 Worker 创建私有临时 socket。 |
tcp-loopback | Linux、Windows、macOS | Host 在 127.0.0.1 随机空闲端口监听。 |
socket 插件须声明 host_api: {"major": 1, "min_minor": 9}。Wire 协议仍为 worker_protocol: {"major": 1, "min_minor": 0}。Go 插件另外声明与制品一致的 target_os、target_arch;Windows Go 制品不能选择 unix。
在现有完整 manifest 中添加一个字段即可,例如:
json
"transport": "tcp-loopback"不要把该片段直接作为完整 manifest。完整 Python 插件创建步骤见第一个插件,Go 清单与打包见独立 Go 插件。
使用 SDK
Python 的 open_stdio() 保留原名称,但会读取 Host 选择的通道;正常 Plugin 入口无需另写 socket 客户端。Go 使用 SDK 的 Open(ctx)。两者都由 Host 传入连接地址和一次性凭据,再完成 Worker 握手;插件作者不设置固定端口、不保存凭据,也不向远程机器提供此端点。
socket 模式下标准输出和标准错误用于诊断,不承载协议。相同的插件权限、配置校验、候选验证和停止清理仍然生效,详见生命周期。
生命周期与失败处理
每次启动分配新的端点和凭据,只接受一次连接尝试。认证失败、连接超时或握手失败会使本次启动失败,不会自动改用另一种传输。停止或启动失败时,Host 关闭本次连接与监听器并清理自己创建的临时目录。
Unix socket 使用 Host 新建的私有临时目录。TCP 仅监听 IPv4 回环地址,不是远程 Worker 接口。插件运行的是可信本机代码;一次性令牌不构成针对同权限恶意进程的沙箱。
发生断连时,先读取实例状态与日志。对已经接纳的持久操作,保留原操作 ID 查询结果;传输断开或调用取消不证明业务未执行,unknown 不自动重放。