惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

IT之家
IT之家
A
About on SuperTechFans
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
N
Netflix TechBlog - Medium
Microsoft Security Blog
Microsoft Security Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
博客园 - 聂微东
博客园 - Franky
D
Docker
Martin Fowler
Martin Fowler
Engineering at Meta
Engineering at Meta
The Cloudflare Blog
人人都是产品经理
人人都是产品经理
Last Week in AI
Last Week in AI
U
Unit 42
F
Fortinet All Blogs
H
Help Net Security
Blog — PlanetScale
Blog — PlanetScale
Microsoft Azure Blog
Microsoft Azure Blog
罗磊的独立博客
P
Proofpoint News Feed
月光博客
月光博客
G
Google Developers Blog

又耳笔记

用AI挣钱之AI建站:二维码生成器工具 用AI挣钱之AI建站:https://markdowntopdf.top Cloudflare Workers实战番外一:用Static Assets托管网站,告别传统方案 Cloudflare Workers实战(五):不止JavaScript,拥抱Python与Rust Cloudflare Workers实战(四):托管和分发静态文件 Cloudflare Workers实战(三):实现认证、重定向与缓存 Cloudflare Workers实战(二):动态修改后端响应 Cloudflare Workers实战(一):随心所欲操作客户端请求 Cloudflare workers不完全指南 使用n8n创作短篇小说 水果风波:信任的代价 用Python将PDF文件转换成图片 rust网络框架Pingora源码阅读3 rust网络框架Pingora源码阅读2 rust网络框架Pingora源码阅读1 Pingora快速入门教程1之总览 Rust模板引擎askama快速入门引擎 使用Loco快速搭建自己的后台系统 用Rust发一封图文并茂的邮件 Rust小项目: 写一个简单的恶意流量阻断器 Rust小项目: 写一个简单的网页爬虫 Rust命令行库Clap快速入门教程 Rust小项目:用Rust写一个端口扫描器 Rust真全栈开发快速入门 rust声明宏快速入门教程 Rust文本处理快速入门教程 RUST web框架axum快速入门教程6之测试 白嫖免费的Rust在线运行时shuttle RUST web框架axum快速入门教程5之中间件 用Rust来做以太坊开发5之事件日志及签名
小龙虾(OpenClaw)源码分析3:Gateway启动内幕,控制平面是怎...
About 又耳宁 关于技术与股票的一些零碎想法 · 2026-04-02 · via 又耳笔记

前一篇我们走完了CLI链路,这一篇终于进入核心区域:Gateway
如果说CLI是“入口大厅”,那Gateway就是“总控室”。

入口函数:startGatewayServer

网关启动核心入口在:

  • src/gateway/server.ts(薄封装)
  • src/gateway/server.impl.ts(真实实现)

关键函数就是:

startGatewayServer(port, opts)

这个函数非常长,但别慌,按阶段拆就不难。

启动阶段拆分(建议你照这个顺序读)

我把它拆成7步:

  1. 读取并准备配置快照(含启动期修复)
  2. 处理鉴权与安全相关初始化
  3. 插件启动前准备(bootstrap)
  4. 解析运行时配置(bind/auth/tailscale/control-ui等)
  5. 创建HTTP/WS服务与运行时状态
  6. 启动通道、订阅、定时服务、配置热更新
  7. 暴露close(),处理优雅关闭

这个分层设计很像大型服务框架的启动管线:
先配置,再依赖,再监听,再副作用服务

为什么它叫“控制平面”

server.impl.ts你会发现,Gateway不只是“收发消息”:

  • 管鉴权(token/password等模式)
  • 管连接(WS客户端、节点、预算限制)
  • 管健康与可观测性(health/readiness/diagnostic)
  • 管插件与通道生命周期
  • 管定时任务和会话相关运行状态

这就是典型控制平面职责:把系统里的“控制逻辑”集中管理。

WS和HTTP是一体化的

OpenClaw里HTTP与WS挂在同一服务进程里,带来几个好处:

  • 控制UI和API可以共享配置/鉴权上下文
  • 节点连接和控制请求在同一状态域里
  • 运行时状态(队列、会话、健康)可统一观察

这种设计对“单机自托管助手”场景非常实用。

关闭逻辑同样重要

很多人读源码只看“怎么启动”,忽略“怎么关闭”。
startGatewayServer返回的是一个带close()的对象,这个close()会做很多善后:

  • 停止通道和插件服务
  • 停止定时器和维护任务
  • 关闭WS/HTTP服务
  • 执行gateway_stop插件钩子

这意味着它把服务生命周期完整闭环了,不是“只管拉起不管下线”。

阅读建议:别一次读完server.impl.ts

这个文件很大,我建议分三轮读:

  1. 第一轮:只看函数调用顺序(启动骨架)
  2. 第二轮:重点看配置/鉴权分支
  3. 第三轮:看插件与通道管理细节

如果第一轮就钻细节,很容易迷路。

小结

这一篇核心收获:

  • startGatewayServer是启动总管,分阶段非常清晰
  • Gateway承担的是控制平面职责,不只是消息中转
  • 优雅关闭与启动同等重要,生命周期是完整设计

下一篇我们接“消息主链路”:一条消息从入站到最终回复,具体经过哪些关键节点。

参考链接