Skip to content

Day 5 — HTTP 支持与调试页面

学习目标

支持通过 HTTP 协议承载 RPC 调用,并提供一个 Web 调试界面查看已注册服务和调用统计。

核心概念

HTTP CONNECT 协议切换

RPC over HTTP 的核心思路是利用 HTTP CONNECT 方法进行协议切换(Protocol Upgrade):

  1. 客户端发送 CONNECT /_minirpc_ HTTP/1.0 请求
  2. 服务端通过 http.Hijacker 接管底层 TCP 连接
  3. 服务端返回 HTTP/1.0 200 Connected to miniRPC
  4. 后续通信切换为 miniRPC 自有协议(Option + Codec)

这种方式的好处是可以复用 HTTP 基础设施(反向代理、负载均衡),同时保持 RPC 的高效二进制通信。

DialHTTP

客户端通过 DialHTTP 连接:先建立 TCP 连接,发送 CONNECT 请求,收到 200 响应后,按正常 RPC 流程通信。

XDial 统一拨号

XDial("protocol@address") 根据协议类型自动选择拨号方式:

  • tcp@host:portDial
  • http@host:portDialHTTP

调试页面

访问 /debug/minirpc 可查看所有已注册服务、方法列表及调用次数。

关键代码

文件说明
server.go (ServeHTTP, HandleHTTP)HTTP CONNECT 处理
client.go (DialHTTP, XDial)HTTP 拨号
debug.go调试页面 HTML 模板

运行

bash
go run ./day5-http/example/