3: 调度 API
守护进程的主要端点是 POST /dispatch。默认情况下,它绑定到 127.0.0.1,因此仅限于本地使用;请在网络边界进行限制。
3.1: 路由:按应用路径
一个调度携带 {app, target, args?, stream?, async?}:绝对的 .../app.php 路径告诉守护进程要运行哪个应用程序,每个应用程序的池通过该路径进行键控。运行时助手(由 daemon 常量启用)知道它们自己的应用程序并直接调度;没有主机映射可供查询。
内置的 WebSocket 服务器(Phlo Realtime)不通过 /dispatch。它只知道连接的 Host 头,因此通过注册表将其解析为一个应用程序,该注册表是从 config/daemon.js 中的 hosts 映射填充的,然后在同一池中进程内调度 websocket::<hook> 目标。POST /message(广播桥)和 GET /health 完成了 API。
3.2: 同步,异步,流
相同的端点以三种形式响应:
| 请求 | 响应 |
|---|---|
| default | {status:"ok", result} 一旦调用返回 |
async: true |
202 {status:"ok", queued:true} 立即;调用在池中以火忘模式运行 |
stream: true |
一个 application/x-ndjson 流 {t:line,data}* 然后 {t:done,result} 或 {t:error} |
流式传输是渐进输出(一个 Phlo Realtime receive 处理程序,一个 AI 令牌流)逐行返回的方式,随着 worker 的打印而流动。
3.3: 返回的是什么
池返回目标的真实返回值,类型保持不变(布尔值仍然是布尔值)。一次性回退返回进程的标准输出作为字符串,因此在结果上进行分支的消费者可以处理这两种形状。错误以拒绝的调度形式出现(同步的 HTTP 错误,流的 {t:error} 帧),这就是抛出处理程序如何变成拒绝的 WebSocket 握手。