Golang RPC 实现介绍。
RPC(Remote Procedure Call Protocol, 远程过程调用协议)是一种通过网络从远程计算机程序上请求服务。
介绍
- RPC 允许运行于一台计算机的程序调用另一台计算机的子程序,而开发人员无需额外地为该交互作用编程
- RPC 基于 HTTP 协议
- 使用 Protobuf
- 优点:简单、通用、安全、效率
常见 RPC 框架
RPC 框架对比
| \ | 跨语言 | 多 IDL | 服务治理 | 注册中心 | 服务管理 |
|---|---|---|---|---|---|
| gRPC | √ | × | × | × | × |
| Thrift | √ | × | × | × | × |
| Rpcx | × | √ | √ | √ | √ |
| Dubbo | × | √ | √ | √ | √ |
golang 的 rpc
- Golang 中
rpc和rpc/jsonrpc包提供对 RPC 的支持rpc构建在 TCP 或 HTTP 协议之上,底层数据编码采用 gob,不支持跨语言调用rpc/jsonrpc构建在 TCP 协议之上,底层数据编码采用 json,支持跨语言调用
定义 RPC 结构体和方法
- RPC 的结构体和方向必须是公开的
- 方法:
func(请求结构体指针, 响应结构体指针) error
调用方式:
- 同步调用
func (client *Client) Call(serviceMethod string, args interface{}, reply interface{}) error - 异步调用
func (client *Client) Go(serviceMethod string, args interface{}, reply interface{}, done chan *Call) *Call
示例
注册服务的两种方法:
err := rpc.Register(&objects.Calculate{})
err := rpc.RegisterName("iamName", &objects.Calculate{})最近更新
最新评论