go实现http的rpc服务

2022-04-25 08:36:12 浏览数 (1)

//http的rpc服务 package main import ( "log" "net/http" "net/rpc" ) //go对RPC的支持,支持三个级别:TCP、HTTP、JSONRPC //go的RPC只支持GO开发的服务器与客户端之间的交互,因为采用了gob编码 type Params struct { Width, Height int } type Rect struct { } //求面积 func (r *Rect) Area(p Params, ret *int) error { *ret = p.Width * p.Height return nil } //求长度 func (r *Rect) Perimeter(p Params, ret *int) error { *ret = (p.Width p.Height) * 2 return nil } func main() { rect := new(Rect) //注册一个rect服务 rpc.Register(rect) //把服务处理绑定到http协议上 rpc.HandleHTTP() err := http.ListenAndServe(":8080", nil) if err != nil { log.Fatal(err) } } //客户端实现 package main import ( "fmt" "log" "net/rpc" ) type Params struct { Width, Height int } func main() { //连接远程rpc服务 rpc, err := rpc.DialHTTP("tcp", "127.0.0.1:8080") if err != nil { log.Fatal(err) } ret := 0 //调用远程方法,注意第三个三叔是指针类型 err = rpc.Call("Rect.Area", Params{30, 40}, &ret) if err != nil { log.Fatal(err) } fmt.Println(ret) err = rpc.Call("Rect.Perimeter", Params{30, 50}, &ret) if err != nil { log.Fatal(err) } fmt.Println(ret) }

0 人点赞