前言

Gateway 是 OpenClaw 的核心枢纽,承担着连接管理、会话路由、认证授权等关键职责。本篇文章将深入剖析 Gateway 的设计与实现。


1. Gateway 核心职责

Gateway 作为 OpenClaw 的中央调度器,主要负责:

┌─────────────────────────────────────────────────────────────────┐
│                     Gateway 核心职责                             │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  ┌───────────────────────────────────────────────────────────┐ │
│  │  🔌 连接管理                                               │ │
│  │  • 客户端连接建立与维护                                    │ │
│  │  • WebSocket 握手处理                                      │ │
│  │  • 心跳检测与断线重连                                      │ │
│  └───────────────────────────────────────────────────────────┘ │
│                                                                  │
│  ┌───────────────────────────────────────────────────────────┐ │
│  │  💬 会话管理                                               │ │
│  │  • Session 创建、维护、销毁                                │ │
│  │  • 上下文加载与保存                                        │ │
│  │  • 多会话并发处理                                          │ │
│  └───────────────────────────────────────────────────────────┘ │
│                                                                  │
│  ┌───────────────────────────────────────────────────────────┐ │
│  │  🔐 认证授权                                               │ │
│  │  • 设备配对码验证                                          │ │
│  │  • OAuth 令牌管理                                          │ │
│  │  • 基于能力的访问控制                                      │ │
│  └───────────────────────────────────────────────────────────┘ │
│                                                                  │
│  ┌───────────────────────────────────────────────────────────┐ │
│  │  ✅ 执行审批                                               │ │
│  │  • 高风险操作审批流程                                      │ │
│  │  • 白名单/黑名单管理                                       │ │
│  │  • SSRF 防护                                              │ │
│  └───────────────────────────────────────────────────────────┘ │
│                                                                  │
│  ┌───────────────────────────────────────────────────────────┐ │
│  │  ⏰ 定时任务                                               │ │
│  │  • Cron 任务调度                                          │ │
│  │  • 周期性提醒                                              │ │
│  │  • 延迟任务处理                                            │ │
│  └───────────────────────────────────────────────────────────┘ │
│                                                                  │
│  ┌───────────────────────────────────────────────────────────┐ │
│  │  🎨 控制面板                                               │ │
│  │  • Web UI 服务                                            │ │
│  │  • 实时状态监控                                            │ │
│  │  • 配置管理界面                                            │ │
│  └───────────────────────────────────────────────────────────┘ │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

2. Gateway 目录结构

src/gateway/
├── boot.ts                 # 启动引导逻辑
├── server-chat.ts          # 聊天核心服务
├── server-control.ts       # 控制面板服务
├── server-cron.ts          # Cron 调度服务
├── auth.ts                 # 认证授权
├── hooks.ts                # 钩子系统
├── delivery.ts            # 消息投递
├── session.ts              # 会话管理
├── pairing.ts              # 设备配对
├── config.ts               # 配置管理
│
├── handlers/               # 请求处理器
│   ├── chat-handler.ts
│   ├── control-handler.ts
│   └── cron-handler.ts
│
├── middleware/             # 中间件
│   ├── auth-middleware.ts
│   ├── rate-limit.ts
│   └── logging.ts
│
└── builtin-hooks/          # 内置钩子
    ├── auto-reply.ts
    └── ...

3. 启动流程

Gateway 的启动流程如下:

┌─────────────────────────────────────────────────────────────────┐
│                        Gateway 启动流程                           │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│   1. 加载配置                                                    │
│      └── openclaw.yaml → 配置验证 (Zod Schema)                   │
│                         │                                        │
│                         ▼                                        │
│   2. 初始化存储                                                   │
│      └── Session Store / Memory Store / Config                  │
│                         │                                        │
│                         ▼                                        │
│   3. 加载插件                                                     │
│      └── extensions/ → manifest.json5 → 安全扫描 → 注册         │
│                         │                                        │
│                         ▼                                        │
│   4. 初始化通道                                                   │
│      └── 连接各消息平台 Webhook / WebSocket                      │
│                         │                                        │
│                         ▼                                        │
│   5. 启动服务                                                     │
│      └── HTTP Server │ WebSocket Server │ Control UI             │
│                         │                                        │
│                         ▼                                        │
│   6. 任务调度                                                    │
│      └── Cron 定时任务启动                                       │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

3.1 核心代码 - 启动引导

// src/gateway/boot.ts (简化版)
export async function boot(config: OpenClawConfig) {
  // 1. 配置验证
  const validatedConfig = await validateConfig(config);

  // 2. 初始化存储
  const stores = await initStores(validatedConfig);

  // 3. 加载插件
  const plugins = await loadPlugins({
    extensionsDir: validatedConfig.extensionsDir,
    security: validatedConfig.security,
  });

  // 4. 初始化 Agent
  const agent = await initAgent({
    plugins,
    config: validatedConfig.agent,
  });

  // 5. 初始化 Gateway
  const gateway = await initGateway({
    agent,
    stores,
    plugins,
    config: validatedConfig.gateway,
  });

  // 6. 启动服务
  await gateway.start();

  return gateway;
}

4. 会话管理

4.1 Session 数据结构

// 会话结构定义
interface Session {
  id: string;                    // 会话唯一 ID
  agentId: string;               // Agent ID
  channelId: string;            // 渠道 ID
  accountId: string;            // 账户 ID

  // 上下文
  context: {
    messages: Message[];         // 消息历史
    files: FileRef[];            // 关联文件
    metadata: Record<string, unknown>;
  };

  // 状态
  state: "active" | "paused" | "closed";

  // 时间戳
  createdAt: Date;
  updatedAt: Date;
  lastActivityAt: Date;
}

4.2 Session 生命周期

┌─────────────────────────────────────────────────────────────────┐
│                      Session 生命周期                            │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│   create() ───────────────────────────────────────────► [active]│
│      │                                                           │
│      │         │◄──── 用户发消息 ────┤                           │
│      │         │                    │                           │
│      │         ▼                    ▼                           │
│      │    [active] ────── 用户长时间不活动 ──────► [paused]      │
│      │         │                                           │    │
│      │         │◄──── 用户恢复 ───────┘                      │    │
│      │         │                                            │    │
│      │         ▼                                            │    │
│      │    [active] ──── 显式关闭 / 超时 ────► [closed]         │
│      │                                                       │    │
│      └────────────────────────────────────────────────────────┘    │
│                                                                  │
│   ● [active]  : 正常处理消息                                     │
│   ● [paused]  : 等待恢复,可快速激活                             │
│   ● [closed]  : 释放资源,可重新创建                             │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

5. 消息处理流程

5.1 完整处理链路

用户消息 (Telegram/Discord/Slack/...)
            │
            ▼
┌─────────────────────────────────────────────────────────────────┐
│  1. Channel Transport                                           │
│     └── 接收并解析平台特定消息格式                               │
└─────────────────────────────────────────────────────────────────┘
            │
            ▼
┌─────────────────────────────────────────────────────────────────┐
│  2. Inbound Processor                                           │
│     ├── 消息验证                                                │
│     ├── 反垃圾处理                                              │
│     └── 速率限制检查                                            │
└─────────────────────────────────────────────────────────────────┘
            │
            ▼
┌─────────────────────────────────────────────────────────────────┐
│  3. Authentication                                              │
│     ├── 设备验证                                                │
│     ├── 权限检查                                                │
│     └── 白名单验证                                              │
└─────────────────────────────────────────────────────────────────┘
            │
            ▼
┌─────────────────────────────────────────────────────────────────┐
│  4. Session Manager                                             │
│     ├── 加载/创建 Session                                       │
│     ├── 上下文恢复                                              │
│     └── 消息路由                                                │
└─────────────────────────────────────────────────────────────────┘
            │
            ▼
┌─────────────────────────────────────────────────────────────────┐
│  5. Pre-Processing Hooks                                        │
│     └── before-agent-start: 消息预处理                          │
└─────────────────────────────────────────────────────────────────┘
            │
            ▼
┌─────────────────────────────────────────────────────────────────┐
│  6. Agent Processing                                            │
│     ├── 上下文构建                                              │
│     ├── AI 模型调用                                             │
│     └── 工具执行                                                │
└─────────────────────────────────────────────────────────────────┘
            │
            ▼
┌─────────────────────────────────────────────────────────────────┐
│  7. Post-Processing Hooks                                       │
│     └── before-agent-reply: 响应后处理                          │
└─────────────────────────────────────────────────────────────────┘
            │
            ▼
┌─────────────────────────────────────────────────────────────────┐
│  8. Approval Flow (高风险操作)                                  │
│     └── 请求审批 / 执行 / 返回结果                               │
└─────────────────────────────────────────────────────────────────┘
            │
            ▼
┌─────────────────────────────────────────────────────────────────┐
│  9. Outbound Dispatcher                                         │
│     ├── 响应格式化                                              │
│     ├── 多平台适配                                              │
│     └── 投递确认                                                │
└─────────────────────────────────────────────────────────────────┘
            │
            ▼
      响应发送 (原路返回)

6. 认证授权

6.1 认证流程

┌─────────────────────────────────────────────────────────────────┐
│                        认证流程                                   │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│   [客户端请求]                                                    │
│         │                                                        │
│         ▼                                                        │
│   ┌─────────────┐                                               │
│   │  Token 验证  │ ◄── Bearer Token / API Key                   │
│   └──────┬──────┘                                               │
│          │                                                       │
│          ▼                                                       │
│   ┌─────────────┐                                               │
│   │  设备配对    │ ◄── Pairing Code                              │
│   └──────┬──────┘                                               │
│          │                                                       │
│          ▼                                                       │
│   ┌─────────────┐                                               │
│   │  权限检查    │ ◄── Capability-based Access                   │
│   └──────┬──────┘                                               │
│          │                                                       │
│          ▼                                                       │
│   ┌─────────────┐                                               │
│   │  请求放行    │                                               │
│   └─────────────┘                                               │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

6.2 Capability 访问控制

// 能力定义示例
const capabilities = {
  "telegram:read": "读取 Telegram 消息",
  "telegram:send": "发送 Telegram 消息",
  "file:read": "读取文件",
  "file:write": "写入文件",
  "shell:exec": "执行 Shell 命令",
  "browser:control": "控制浏览器",
};

// 权限检查
async function checkCapability(
  session: Session,
  capability: string
): Promise<boolean> {
  const userCaps = await getUserCapabilities(session.userId);
  return userCaps.includes(capability);
}

7. 控制面板

Gateway 内置 Web 控制面板,提供:

┌─────────────────────────────────────────────────────────────────┐
│                      控制面板功能                                 │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  📊 Dashboard                                                    │
│  ├── 系统状态概览                                               │
│  ├── 活跃会话统计                                               │
│  ├── API 使用量                                                 │
│  └── 最近活动                                                    │
│                                                                  │
│  💬 会话管理                                                     │
│  ├── 会话列表                                                   │
│  ├── 会话详情                                                   │
│  └── 历史记录搜索                                               │
│                                                                  │
│  🔌 插件管理                                                     │
│  ├── 已安装插件                                                 │
│  ├── 插件市场                                                   │
│  └── 插件配置                                                   │
│                                                                  │
│  ⚙️ 系统配置                                                     │
│  ├── 模型配置                                                    │
│  ├── 安全设置                                                    │
│  └── 渠道配置                                                   │
│                                                                  │
│  📜 日志查看                                                     │
│  ├── 操作日志                                                   │
│  └── 错误日志                                                   │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

8. 本章小结

┌─────────────────────────────────────────────────────────────────┐
│                        本章要点                                   │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  🎯 Gateway 核心职责                                            │
│  ├── 连接管理: 客户端连接、WebSocket、心跳检测                   │
│  ├── 会话管理: Session CRUD、上下文、生命周期                    │
│  ├── 认证授权: Token、设备配对、能力访问控制                    │
│  ├── 执行审批: 高风险操作审批、白名单管理                        │
│  └── 控制面板: Web UI、监控、配置管理                          │
│                                                                  │
│  🔄 消息处理链路                                                │
│  └── 接收 → 验证 → 认证 → 路由 → Hooks → Agent → 响应        │
│                                                                  │
│  📁 关键文件                                                     │
│  ├── boot.ts: 启动引导                                         │
│  ├── server-chat.ts: 聊天服务                                   │
│  └── auth.ts: 认证授权                                          │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

系列导航

章节标题状态
01OpenClaw 是什么?✅ 已发布
02系统架构全景图✅ 已发布
03Gateway 网关层(本文)✅ 已发布
04Agents 模块:AI 大脑的构建之道🔜 下一章

如有问题欢迎在评论区留言!

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐