Go RPC 使用例子

RPC是 Remote Procedure Call 的缩写,从字面意思理解就是远程过程调用,详细解释 地址

Go 语言官方包里面实现了 RPC,我这里就来个小例子做下简单的演示。

Server

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package main

import "fmt"
import "net/rpc"
import "net/http"
import "net"

type Args struct {
A, B int
}

type Quotient struct {
Quo, Rem int
}

type Arith int

func (this *Arith) Sum(args *Args, reply *int) error {
*reply = args.A + args.B
return nil
}

func (this *Arith) Sub(args *Args, reply *int) error {
*reply = args.A - args.B
return nil
}

func main() {
arith := new(Arith)
rpc.Register(arith)

rpc.HandleHTTP()
l, err := net.Listen("tcp", ":8006")
if err != nil {
fmt.Println("err")
return
}
go http.Serve(l, nil)

select {}
}

Client

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package main

import (
"fmt"
"log"
"net/rpc"
)

type Args struct {
A, B int
}

type Quotient struct {
Quo, Rem int
}

func main() {

client, err := rpc.DialHTTP("tcp", ":8006")
if err != nil {
log.Fatal("dialing", err)
}

args := &Args{6, 3}
var reply int

err = client.Call("Arith.Sum", args, &reply)
if err != nil {
log.Fatal("arith error:", err)
}
fmt.Printf("Arith: %d+%d=%d\n", args.A, args.B, reply)

err = client.Call("Arith.Sub", args, &reply)

if err != nil {
log.Fatal("arith error:", err)
}

fmt.Printf("Atith: %d-%d=%d\n", args.A, args.B, reply)

}

#演示

1
2
3
go run server.go

go run client.go

可以观察 client 端的输出结果。

©版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 & 作者信息

Happy Coding

坚持原创技术分享,您的支持将鼓励我继续创作!
Flyertutor WeChat Pay

WeChat Pay

Flyertutor Alipay

Alipay