rpc服务端server.go
注册服务对外提供服务
package main
import (
"fmt"
"math"
"net"
"net/http"
"net/rpc"
)
//定义接受者,可以实例化暴露对象
//定义接收者的方法,也是为远程提供的方法
//实例化结构体对象
//注册为rpc服务
//rcp注册到http请求协议
//启动服务监听对外提供服务
type CalculatedArea struct {
}
func (c *CalculatedArea) Add(req float32, resp *float32) error {
*resp = math.Pi * req * req
return nil
}
func main() {
calculatedArea := new(CalculatedArea)
err := rpc.Register(calculatedArea)
defer func() {
if r := recover(); r != nil {
fmt.Print(r)
}
}()
if err != nil {
panic(err.Error())
}
rpc.HandleHTTP()
listen, err := net.Listen("tcp", "localhost:9080")
if err != nil {
panic(err.Error())
}
http.Serve(listen, nil)
}
rpc客户端,请求远端rpc服务提供的方法
package main
import (
"fmt"
"net/rpc"
)
//1、建立连接,连接到服务端
//2、定义传参,与服务端逻辑入参一致
//3、调用远程方法
//4、使用远程方法计算结果
func main() {
client, err := rpc.DialHTTP("tcp", "localhost:9080")
if err != nil {
panic(err.Error())
}
//定义传参数与接收值
var req = 24.0
var resq *float32
err = client.Call("CalculatedArea.Add", req, &resq)
if err != nil {
panic(err.Error())
}
fmt.Print(*resq)
}
//结果1809.5574