RPC

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)
}

 

你可能感兴趣的:(golang)