主题
Day 5 — HTTP 支持与调试页面
学习目标
支持通过 HTTP 协议承载 RPC 调用,并提供一个 Web 调试界面查看已注册服务和调用统计。
核心概念
HTTP CONNECT 协议切换
RPC over HTTP 的核心思路是利用 HTTP CONNECT 方法进行协议切换(Protocol Upgrade):
- 客户端发送
CONNECT /_minirpc_ HTTP/1.0请求 - 服务端通过
http.Hijacker接管底层 TCP 连接 - 服务端返回
HTTP/1.0 200 Connected to miniRPC - 后续通信切换为 miniRPC 自有协议(Option + Codec)
这种方式的好处是可以复用 HTTP 基础设施(反向代理、负载均衡),同时保持 RPC 的高效二进制通信。
DialHTTP
客户端通过 DialHTTP 连接:先建立 TCP 连接,发送 CONNECT 请求,收到 200 响应后,按正常 RPC 流程通信。
XDial 统一拨号
XDial("protocol@address") 根据协议类型自动选择拨号方式:
tcp@host:port→Dialhttp@host:port→DialHTTP
调试页面
访问 /debug/minirpc 可查看所有已注册服务、方法列表及调用次数。
关键代码
| 文件 | 说明 |
|---|---|
server.go (ServeHTTP, HandleHTTP) | HTTP CONNECT 处理 |
client.go (DialHTTP, XDial) | HTTP 拨号 |
debug.go | 调试页面 HTML 模板 |
运行
bash
go run ./day5-http/example/