RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
简单来说,就是跟远程访问或者web请求差不多,都是一个client向远端服务器请求服务返回结果,但是web请求使用的网络协议是http高层协议,而rpc所使用的协议多为TCP,是网络层协议,减少了信息的包装,加快了处理速度。
1.调用客户端句柄;执行传送参数
2.调用本地系统内核发送网络消息
3.消息传送到远程主机
4.服务器句柄得到消息并取得参数
5.执行远程过程
6.执行的过程将结果返回服务器句柄
7.服务器句柄返回结果,调用远程系统内核
8.消息传回本地主机
9.客户句柄由内核接收消息
10.客户接收句柄返回的数据
服务端
package main
type Panda int;
//argType是导入 replyType是导出
func(this * Panda)Getinfo (argtype int,replyType *int)error{
beego.Info(argType)
* replyType=1+argType
return nil
}
func main(){
//new一个对象
pd:=new(Panda)
//注册服务
//register在默认服务中注册并公布 接收服务 pd对象 的方法
rpc.Register(pd)
rpc.HandleHTTP()
//建立网络监听
ln,err:=net.Listen("tcp","127.0.0.1:10086")
if err!=nil{
beego.Info("网络连接失败!")
}
beego.Info("正在监听10086")
//service接受侦听器上传入的HTTP连接
http.Serve(ln,nil)
}
客户端:
package main
func main(){
//rpc的与服务器建立网络连接
cli,err:=rpc.DialHTTP("tcp","127.0.0.1:10086")
if err!=nil{
beego.Info("网络连接失败")
}
var val int
//远程调用函数(被调用的方法,传入的参数,返回的参数)
err=cli.Call("Panda.Getinfo",123,&val)
if err!=nil{
beego.Info("失败!")
}
beego.Info(''返回结果",val)
}