章节

17.6 RPC 客户端

本篇学习 net/rpc 客户端的连接与调用方式,并能调用 RPC 服务端方法。

RPC 客户端

概念说明

RPC 客户端负责连接 RPC 服务端,并按 服务名.方法名 调用远程方法。
调用时传入请求参数,再传入一个用于接收结果的指针。

运行客户端前,需要先启动对应的 RPC 服务端。

语法/规则

  1. 使用 rpc.Dial("tcp", address) 连接服务端。
  2. 使用 client.Call("Service.Method", args, &reply) 调用方法。
  3. args 类型要和服务端方法参数匹配。
  4. reply 必须是指针。
  5. 调用完成后关闭客户端连接。

RPC 客户端示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package main

import (
	"fmt"
	"net/rpc"
)

type Args struct {
	A int
	B int
}

func main() {
	client, err := rpc.Dial("tcp", "127.0.0.1:9001")
	if err != nil {
		panic(err)
	}
	defer client.Close()

	var reply int
	err = client.Call("Calculator.Add", Args{A: 1, B: 2}, &reply) // 远程调用服务端方法
	if err != nil {
		panic(err)
	}

	fmt.Println(reply)
}

输出结果:

1
3

常见错误

  1. 调用名写错,例如服务端是 Calculator.Add,客户端却写成 Calc.Add
  2. 请求参数结构体字段不匹配,导致服务端无法正确解码。
  3. reply 没有传指针,导致结果无法写回。
  4. 不处理 Call 返回的错误,导致远程调用失败被忽略。
本文禁止转载
使用 Hugo 构建
主题 StackJimmy 设计 由 Hobin 魔改
最近构建时间:2026-04-17 19:07:48 CST
载入天数...载入时分秒...
发表了 1 篇文章 · 发表了 152 篇笔记 · 总计 18 万 0 千字