- 服务器代码实现:
package main
import (
"net/rpc"
"net/http"
"log"
)
// 服务器端口
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)
rpc.Register(rect)
rpc.HandleHTTP()
err:= http.ListenAndServe(":9090",nil)
if err!=nil {
log.Fatal(err)
}
}
2.客户端代码实现:
package main
import (
"net/rpc"
"log"
"fmt"
)
//实现rpc客户端
type Params struct {
Width, Height int
}
//
func main() {
// 链接远程rpc
rp,err := rpc.DialHTTP("tcp","127.0.0.1:9090")// 拨号链接
if err!=nil {
log.Fatal(err)
}
// 接收服务器传递过来的结果
ret :=0
e:= rp.Call("Rect.Area",Params{100,100},&ret)
if e !=nil {
log.Fatal(e)
}
fmt.Println(ret)
}
客户端打印结果: