更新日期: 2026-03-04
module/file.py:function_nameGateway 采用三层架构:
┌─────────────────────────────────────────────────┐
│ Router 层(路由和 API) │
│ - WebSocket 连接处理 │
│ - HTTP API 端点 │
│ - 消息路由逻辑 │
└─────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────┐
│ Registry 层(注册和状态) │
│ - Agent 连接信息 │
│ - 在线状态管理 │
│ - 心跳超时检测 │
└─────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────┐
│ Client 层(客户端) │
│ - WebSocket 客户端 │
│ - 自动心跳 │
│ - 消息接收处理 │
└─────────────────────────────────────────────────┘
管理在线 Agent 的注册信息和连接。
实现位置:gateway/core/registry.py:AgentRegistry
职责:
关键方法:
register() - 注册 Agentunregister() - 注销 Agentheartbeat() - 更新心跳is_online() - 检查在线状态list_agents() - 列出 Agent处理消息路由和 API 端点。
实现位置:gateway/core/router.py:GatewayRouter
职责:
API 端点:
WS /gateway/connect - Agent 注册POST /gateway/send - 发送消息GET /gateway/status/{agent_uri} - 查询状态GET /gateway/agents - 列出 AgentPC Agent 用于连接 Gateway 的客户端。
实现位置:gateway/core/client.py:GatewayClient
职责:
PC Agent Gateway
│ │
│ 1. WebSocket 连接 │
├──────────────────────────>│
│ │
│ 2. 发送注册消息 │
│ {type: "register", │
│ agent_uri: "...", │
│ capabilities: [...]} │
├──────────────────────────>│
│ │ Registry.register()
│ │
│ 3. 返回注册确认 │
│ {type: "registered"} │
│<──────────────────────────┤
│ │
│ 4. 开始心跳循环 │
│ (每 30 秒) │
│ │
Agent A Gateway Agent B
│ │ │
│ 1. 发送消息 │ │
│ POST /gateway/send │ │
├──────────────────────>│ │
│ │ 2. 查找目标 Agent │
│ │ Registry.lookup() │
│ │ │
│ │ 3. 通过 WebSocket │
│ │ 转发消息 │
│ ├──────────────────────>│
│ │ │
│ 4. 返回成功 │ │
│<──────────────────────┤ │
问题:PC Agent 在 NAT 后面,如何被其他 Agent 访问?
决策:PC Agent 主动连接 Gateway(反向连接)
理由:
实现位置:gateway/core/client.py:GatewayClient.connect
问题:如何判断 Agent 是否在线?
决策:每 30 秒发送心跳,60 秒超时
理由:
实现位置:gateway/core/registry.py:AgentRegistry._cleanup_loop
问题:使用 WebSocket 还是 HTTP 轮询?
决策:WebSocket 长连接
理由:
实现位置:gateway/core/router.py:GatewayRouter.handle_websocket
可以添加中间件来扩展功能:
class AuthMiddleware:
async def process(self, msg):
# 认证检查
if not await self.auth.verify(msg):
raise Unauthorized()
return msg
router = GatewayRouter(
registry=registry,
middlewares=[AuthMiddleware(), AuditMiddleware()]
)
Enterprise 功能可以作为中间件集成:
from gateway.enterprise import EnterpriseAuth, EnterpriseAudit
router = GatewayRouter(
registry=registry,
middlewares=[
EnterpriseAuth(),
EnterpriseAudit(),
CostMiddleware()
]
)