rpc/server/server.go
package main
import (
"log"
"net/http"
"net/rpc"
)
// 服务端,求面积和周长
// 声明矩形对象
type Rect struct {
}
// 声明参数结构体
type Params struct {
// 长和宽
Width, Height int
}
// 定义求矩形面积的方法
func (c *Rect) Area(p Params, ret *int) error {
*ret = p.Width * p.Height
return nil
}
// 定义求矩形周长的方法
func (c *Rect) Perimeter(p Params, ret *int) error {
*ret = (p.Width * p.Height)*2
return nil
}
func main() {
// 1.注册服务
rect := new(Rect)
rpc.Register(rect)
// 2.把服务处理绑定到http上
rpc.HandleHTTP()
// 3.监听服务
err := http.ListenAndServe(":8888", nil)
if err != nil {
log.Fatal(err)
}
}
2.rpc/client/client.go
package main
import (
"fmt"
"net/rpc"
"log"
)
type Params struct {
Width, Height int
}
// 调用服务
func main() {
// 1. 连接远程rpc服务
rp, err := rpc.DialHTTP("tcp", "127.0.0.1:8888")
if err != nil {
log.Fatal(err)
}
// 2.调用远程方法
ret := 0
// 求面积
err2 := rp.Call("Rect.Area", Params{50, 100}, &ret)
if err2 != nil {
log.Fatal(err)
}
fmt.Println("面积:", ret)
// 求周长
err3 := rp.Call("Rect.Perimeter", Params{50, 100}, &ret)
if err3 != nil {
log.Fatal(err)
}
fmt.Println("周长:", ret)
}
3.先运行server.go ,
面积: 5000
周长: 10000
Process finished with exit code 0
然后运行client.go