【笔记】Go语言的RPC

前言

Go语言的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
28
29
package main

import (
"net"
"net/http"
"net/rpc"
)

type Server struct {}

type Request struct {
Value string
}

type Response struct {
Value string
}

func (Server) Method(request Request, response *Response) (err error) {
response.Value = request.Value
return nil
}

func main() {
rpc.Register(new(Server))
rpc.HandleHTTP()
server, err := net.Listen("tcp", "127.0.0.1:8080")
http.Serve(listen, server)
}

定义客户端

同步

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package main

import "net/rpc"

type Request struct {
Value string
}

type Response struct {
Value string
}

func main() {
var request = Request{Value: "value"}
var response Response
client, err := rpc.DialHTTP("tcp", "127.0.0.1:8080")
client.Call("Server.Method", request, &response)
}

异步

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

import "net/rpc"

type Request struct {
Value string
}

type Response struct {
Value string
}

func main() {
var request = Request{Value: "value"}
var response Response
client, err := rpc.DialHTTP("tcp", "127.0.0.1:8080")
call := client.Go("Server.Method", request, &response, nil)

...

<-call.Done
}

完成

参考文献

哔哩哔哩——go圈里最会写js的奇淼