rpc即远程过程调用。
在server端提供计算、文件存储等服务。在客户端去调用server端的这些服务,使客户端的业务变得简洁和高效。

server:

package main

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

// HelloService is rpc server obj
type HelloService struct{}

// Hello is rpc server method x.
func (p *HelloService) Hello(request string, reply *string) error {
*reply = "hello:" + request
return nil
}

// GoodLuck is rpc server method x
func (p *HelloService) GoodLuck(request string, reply *string) error {
*reply = "Good_luck:" + request
return nil
}

func main() {
rpc.RegisterName("HelloService", new(HelloService))
listener, err := net.Listen("tcp", ":1235")
if err != nil {
log.Fatal("ListenTCP error:", err)
}
for {
conn, err := listener.Accept()
if err != nil {
log.Fatal("Accept error:", err)
}
go func() {
rpc.ServeConn(conn)
}()
}
}

client:

package main

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

func main() {
client, err := rpc.Dial("tcp", "localhost:1235")
if err != nil {
log.Fatal("dialing:", err)
}
var reply string
err = client.Call("HelloService.Hello", "hello", &reply)
if err != nil {
log.Fatal(err)
}
fmt.Println(reply)
err = client.Call("HelloService.GoodLuck", "hello", &reply)
if err != nil {
log.Fatal(err)
}
fmt.Println(reply)
}

使用vscode调试。开启服务器端,开启客户端。客户端的执行结果如下:

API server listening at: 127.0.0.1:41148
hello:hello
Good_luck:hello
Process exiting with code: 0