乐于分享
好东西不私藏

从OpenClaw源码分析小龙虾是如何工作的?——Gateway中央控制器

从OpenClaw源码分析小龙虾是如何工作的?——Gateway中央控制器
回顾:从OpenClaw源码分析小龙虾是如何工作的?——概览与调试环境搭建

近期将连续发布《从OpenClaw源码分析小龙虾是如何工作的?》,本系列一共十篇文章。 主题为:概览与调试环境搭建->Gateway中央控制器->Session管理分析->提示词上下文分析->ReAct 原理与 pi-mono 源码分析->定时任务与心跳机制->记忆系统分析->Skill 体系分析->Channel 系统分析->自我进化机制。

第2篇:Gateway中央控制器

一、Gateway 的核心功能

Gateway 是 OpenClaw 的中央控制器,类似于一个智能路由器,负责协调所有组件之间的交互。它的核心职责包括:

  • HTTP/WebSocket 服务:提供统一的 API 入口
  • RPC 方法路由:将 WebSocket 消息分发到对应的处理器
  • 认证授权:验证客户端身份
  • 生命周期管理:管理 Channel、Session、Cron 等组件的生命周期
  • 事件总线:协调各组件之间的通信

二、Gateway 启动流程完整追踪

我们从一个启动命令开始,一步步追踪 Gateway 的启动过程:

node --enable-source-maps scripts/run-node.mjs --dev gateway --allow_unconfigured --token 123456

启动流程图

run-node.mjs (编译 + 启动)        ↓  openclaw.mjs (主入口)        ↓  加载 entry.js (src/entry.ts → dist/entry.js)        ↓  加载 cli/run-main.js (执行 runCli())        ↓  CLI 解析命令: "gateway" + "--dev"        ↓  runGatewayCommand() (run.ts)        ↓  runGatewayLoop() → startGatewayServer()        ↓        🎉 Gateway 服务启动完成

各阶段详解

阶段1:run-node.mjs

这个脚本负责:

  • 将 src 目录编译到 dist 目录
  • 启动实际的入口文件

阶段2:openclaw.mjs

主入口文件,核心代码逻辑:

// 简化后的逻辑import { entry } from"./dist/entry.js";entry().catch(console.error);

阶段3:entry.ts

// src/entry.ts 简化import { runCli } from"./cli/run-main.js";asyncfunctionmain() {await runCli();}main();

阶段4:CLI 命令解析

使用 commander 库解析命令行参数:

// 简化示意program    .command('gateway')    .option('--port <port>')    .option('--allow_unconfigured')    .option('--token <token>')    .action(async (options) => {await runGatewayCommand(options);    });

三、启动主要函数

四、配置文件&命令

openclaw gateway --port 18789openclaw gateway statusopenclaw gateway healthopenclaw gateway --forceopenclaw gateway ...

五、整体代码情况

server.impl.ts:启动入口,编排整个 Gateway 的初始化顺序。server-runtime-state.ts :运行时状态工厂,创建HTTP服务器、WebSocket 服务器、广播器等基础设施。server-http.ts:HTTP 请求路由,统一处理HTTP调用。ver-ws-runtime.ts:将WebSocket连接的消息路由到对应的 RPC 方法处理器,管理连接生命周期。server-methods.ts:RPC 方法注册中心。将方法名映射到处理函数,WebSocket 消息通过它派发。server-methods/:各方法的具体实现目录。server-chat.ts:管理聊天运行状态。server-channels.ts:Channel 生命周期管理。server-cron.ts:定时任务引擎,管理定时任务的命周期。session-utils.ts:会话存储与查询。protocol/:协议定义与验证。auth.ts:认证授权。解析 token/password 认证。hooks.ts:提供钩子机制,允许在特定事件触发回调。openai-http.ts:OpenAI API 兼容层。openresponses-http.ts :OpenAI Responses API 兼容层。tools-invoke-http.ts:工具调用 HTTP API。

六、核心模块

server-http.ts

核心代码:src/gateway/server-http.ts

主要职责:创建HTTP 服务处理两类请求:

  1. REST API 请求通过 handleRequest()处理
  2. WebSocket 升级通过attachGatewayUpgradeHandler()处理

server-methods.ts

核心代码:src/gateway/server-methods.ts

主要职责:配置分发WebSocket 服务处理handler,根据接收到的方法转到对应的hanadler进行处理。

src/gateway/client.ts

核心代码:src/gateway/client.ts

主要职责:Gateway 客户端 SDK,用于连接 Gateway 服务器并发送 RPC 请求。核心类是GatewayClient,通过它可以很方便RPC。

src/cli/gateway-cli/目录

核心代码:src/cli/gateway-cli/目录

主要职责:Gateway CLI命令窗口,提供openclaw gateway命令,用于本地启动并管理Gateway服务。

实现:通过nodejs内置commander库实现命令窗口,然后通过GatewayClient实现RPC调用,底层也是websocket通信。

下一篇文章,我们将深入分析 Session 管理