Skip to content
2026-09-29 04:20613 字AIOpenClawGateway网关

Gateway Server 网关服务器 ​

源码路径:src/gateway/(~30 文件) 核心实现:server.impl.ts(67KB)

Gateway Server 是 OpenClaw 的唯一外部入口。所有消息渠道、第三方 API 调用、控制 UI 访问全部经过 Gateway。

核心职责 ​

职责说明
消息路由接收所有渠道入站消息,分发到 Auto-Reply
HTTP APIOpenAI 兼容 API、控制 UI、插件 HTTP 路由
WebSocket实时推送 Agent 事件流给订阅者
方法注册表管理核心和插件 RPC 方法,懒加载处理器
频道生命周期启动/停止/重启渠道插件,健康监控
启动引导运行工作区 BOOT.md 初始化检查

关键源文件 ​

文件职责
server.ts公共入口(门面),懒加载 impl
server.impl.ts主实现(67KB),编排所有子系统启动
server-http.tsHTTP 服务器路由与控制 UI
server-chat.tsAgent 事件→聊天流投影
server-channels.ts渠道运行时管理、健康监控
server-plugins.ts插件加载与回退上下文
boot.tsBOOT.md 初始化运行器
control-ui.ts打包 UI 资源、CSP 安全头

设计模式 ​

懒加载模式(核心模式) ​

大量使用动态 import() 延迟加载子系统,减少冷启动时间:

typescript
// server.ts - 入口点,不直接导入实现
export async function startGatewayServer(...args) {
  const { createGatewayServer } = await import('../gateway/server.impl.js');
  return createGatewayServer(...args);
}

门面模式 ​

server.ts 作为公共门面,只暴露最小接口,隐藏 67KB 实现细节。

回退上下文模式 ​

为非 WebSocket 请求提供进程级网关上下文:

typescript
export function setFallbackGatewayContext(ctx: GatewayContext | null): void;
export function hasInProcessGatewayContext(): boolean;

退避重启策略 ​

频道故障时使用指数退避:

typescript
const CHANNEL_RESTART_POLICY = {
  initialMs: 5000,   // 5秒
  maxMs: 300000,     // 5分钟
  factor: 2          // 2倍增长
};
const MAX_RESTART_ATTEMPTS = 10;
const CHANNEL_STARTUP_CONCURRENCY = 4;

启动流程 ​

startGatewayServer()
  → 动态 import server.impl.ts
  → 加载配置 (Config System)
  → 加载插件清单 (Plugin Loader)
  → 初始化模型目录 (Model Catalog)
  → 启动频道运行时 (Channels)
  → 初始化 MCP 桥接
  → 启动 HTTP 服务器
  → 启动 WebSocket
  → 运行 BOOT.md 启动会话
  → 进入就绪状态

关键协议 ​

协议用途
WebSocketAgent 事件流实时推送
HTTP RESTOpenAI 兼容 API、控制 UI、插件路由
JSON-RPCGateway 内部方法调用

依赖关系 ​

  • 依赖:Config System、Plugin System、Channels、Agent Engine、Auto-Reply、Cron、Secrets、Security
  • 被依赖:所有外部系统(渠道、API 调用方、控制 UI)

每一篇文章,都是时间的标本