目录
什么是RPC
RPC(Remote Procedure Call Protocol),是远程过程调用的缩写,通俗的说就是调用远处的一个函数。
RPC:远程进通信 —— 应用层协议(http协议同层)。底层使用 TCP 实现。
IPC: 进程间通信
像调用本地函数一样,去调用远程函数。
通过rpc协议,传递:函数名、函数参数。达到在本地,调用远端函数,得返回值到本地的目标。
为什么微服务使用 RPC:
1. 每个服务都被封装成 进程。彼此”独立“。
2. 进程和进程之间,可以使用不同的语言实现。
RPC 使用的步骤
服务端:
-
注册 rpc 服务对象。给对象绑定方法( 1. 定义类, 2. 绑定类方法 )
rpc.RegisterName("服务名",回调对象)
-
创建监听器
listener, err := net.Listen()
-
建立连接
conn, err := listener.Accept()
-
将连接 绑定 rpc 服务。
rpc.ServeConn(conn)
客户端:
-
用 rpc 连接服务器。
conn, err := rpc.Dial()
-
调用远程函数。
conn.Call("服务名.方法名", 传入参数, 传出参数
RPC 相关函数
-
注册 rpc 服务
func (server *Server) RegisterName(name string, rcvr interface{}) error 参1:服务名。字符串类型。 参2:对应 rpc 对象。 该对象绑定方法要满足如下条件: 1)方法必须是导出的 —— 包外可见。 首字母大写。 2)方法必须有两个参数, 都是导出类型、內建类型。 3)方法的第二个参数必须是 “指针” (传出参数) 4)方法只有一个 error 接口类型的 返回值。 举例: type World stuct { } func (this *World) HelloWorld (name string, resp *string) error { } rpc.RegisterName("服