跳转到正文

Worker 传输 ​

独立 Python 与 Go 插件可以使用标准输入输出、本机 Unix socket 或本机 TCP 回环连接。传输方式只改变 Host 与插件的通信通道,不增加权限,也不改变持久操作、事件 ACK 或生命周期规则。驻留 Lua 模块在 Host 内运行,不使用独立 socket Worker。

选择通道 ​

transport系统使用方式
不填写或 stdioLinux、Windows、macOS默认。标准输出只写协议帧;日志写标准错误。
unixLinux、macOSHost 为这一代 Worker 创建私有临时 socket。
tcp-loopbackLinux、Windows、macOSHost 在 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 不自动重放。

Neomega · 使用、开发与参考文档