首先新建一个文件夹distributed_calculator, cd 进去
.
├── calculator.go
├── client
│ └── client.go
├── go.mod
└── server
└── server.go
calculator.go 中:
package calculator
type Calculator int
type Args struct {
A, B int
}
func (c *Calculator) Add(args *Args, reply *int) error {
*reply = args.A + args.B
return nil
}
server.go 中:
package main
import (
"calculator"
"log"
"net"
"net/http"
"net/rpc"
)
func main() {
calc := new(calculator.Calculator)
rpc.Register(calc)
rpc.HandleHTTP()
listener, err := net.Listen("tcp", ":1234")
if err != nil {
log.Fatal("Listener error:", err)
}
log.Printf("Serving RPC server on port %d", 1234)
http.Serve(listener, nil)
}
client.go 中:
package main
import (
"calculator"
"fmt"
"log"
"net/rpc"
)
func main() {
client, err := rpc.DialHTTP("tcp", "localhost:1234")
if err != nil {
log.Fatal("Dialing error:", err)
}
args := calculator.Args{A: 7, B: 9}
var reply int
err = client.Call("Calculator.Add", args, &reply)
if err != nil {
log.Fatal("RPC error:", err)
}
fmt.Printf("%d + %d = %d\n", args.A, args.B, reply)
}