RPC编程

RPC编程

RPC编程简介

RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。构建于TCP,UDP或者HTTP,允许开发者直接调用另一台计算机上的的程序,而开发者无需额外的为这个调用过程编写网络通信相关代码,使得开发网络分布是程序在内的应用程序更加便捷。
  RPC采用客户机/服务器模式。请求程序就是一个客户端,而服务提供程序就是一个服务器。首先,客户端调用进程发送一个有进程参数的调用信息到服务端,然后等待服务端响应。在服务器端,进程保持睡眠状态直到调用信息的到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行并继续进行。
  客户机对服务器的RPC调用,其内部操作大致有如下十步:

  1. 调用客户端句柄;执行传送参数
  2. 调用本地系统内核发送网络消息
  3. 消息传送到远程主机
  4. 服务器句柄得到消息并取得参数
  5. 执行远程过程
  6. 执行的过程将结果返回服务器句柄
  7. 服务器句柄返回结果,调用远程系统内核
  8. 消息传回本地主机
  9. 客户句柄由内核接收消息
  10. 客户接收句柄返回的数据

GO语言中RPC的支持于与处理

go语言标准库提供net/rpc包实现了RPC协议需要的相关细节,该包允许RPC客户端程序通过网络或者其他I/O连接调用一个远端对象的公开方法(必须大写字母开头,可外部调用的)。在RPC服务端可以将一个对象注册为可访问的服务,之后该对象的公开方法就能够以远程的方式提供访问。一个RPC可以注册多个不同类型的对象,但是不可以注册一个类型的多个对象。

  • 一个对象只有满足以下条件才可以被RPC服务注册为可远程访问:

    • 必须是在对象外部可公开调用的方法(首字母大写)
    • 必须有两个参数,且参数类型必须是包外部可以访问的类型或者是Go内建支持的类型
    • 第二个参数必须是一个指针
    • 必须返回一个error类型的值

以上四点可用如下代码来表示:

    func (t * T)MethodName(argType T1,replyType * T2)error 
  • 该方法第一个参数表示的是由RPC客户端传入的参数,第二个参数表示要返回给RPC客户端的结果,返回一个error类型的值。在RPC客户端中,net/rpc提供了rpc.Dail()及rpc.DialHTTP()方法来于指定的RPC服务端建立连接。
  • 建立连接后有同步和异步两种方式接受RPC服务端的处理结果。 调用RPC客户端的Call()方法则进行同步处理,调用RPC客户端的Go()方法则进行异步处理。
  • 无论两种方法的哪一种都必须指定要调用的服务及其方法名称,以及传入一个客户端参数的引用,还有一个用于接受处理结果参数的指针。
  • 如果没有指定RPC传输使用何种编解码器,默认将使用Go标准库提供的encoding/gob包进行数据传输。如果使用跨语言交互,则使用JSON编解码器进行交互。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值