RPC快速入门(GO)

RPC是什么?

在分布式计算,远程过程调用(英语:Remote Procedure Call,缩写为 RPC)是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一个地址空间(通常为一个开放网络的一台计算机)的子程序,而程序员就像调用本地程序一样,无需额外地为这个交互作用编程(无需关注细节)。RPC是一种服务器-客户端(Client/Server)模式,经典实现是一个通过发送请求-接受回应进行信息交互的系统。

编写Server端代码

package main

import(
	"math"
	"net/rpc"
	"net"
	"net/http"
)

type MathNum struct{
}

//求圆面积
func (m *MathNum) Computed (req float32,resp *float32)error{
	*resp = math.Pi * req * req
	return nil
}

func main(){
	//初始化指针数据类型
   num := new(MathNum)
   //调用net/rpc包对服务对象进行注册
   err := rpc.Register(num)
   if err != nil {
	   panic(err.Error())
   }
   //通过该函数将MathNum所提供对服务注册到http协议上,方便调用者利用http到方式进行数据传输
   rpc.HandleHTTP()
   //在指定端口进行监听
   listen,err:= net.Listen("tcp",":8006")
   if err != nil {
	panic(err.Error())
   }
   http.Serve(listen,nil)
}

编写Client端代码

package main

import(
	"net/rpc"
	"fmt"
)


func main(){
 client,err := rpc.DialHTTP("tcp","localhost:8006")
 if err != nil {
	 panic(err.Error())
 }
 var req float32
 req = 2
 //同步调用
//  var resp *float32
//  err = client.Call("MathNum.Computed",req,&resp)
//  if err != nil {
// 	panic(err.Error())
//  }
//  fmt.Println(*resp)
//异步调用
var asyncResp *float32
async := client.Go("MathNum.Computed",req,&asyncResp,nil)
replay := <-async.Done
 fmt.Println(replay)
 fmt.Println(*asyncResp)
}

tips:
需要先将server端启动,client端才能正常运行

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值