微服务入门
理解RPC
GO Socket通信
server端
net.Listen() ----> listener 创建监听器
listener.Accept() ----> conn 启动监听器,建立连接
conn.Read()
conn.Write()
defer conn.Close()/listener.Close()
client端
net.Dial() ----> conn
conn.Write()
conn.Read()
defer conn.Close()
GO RPC
server端
// 1. 注册rpc服务对象。给对象绑定方法(1. 定义类, 2. 绑定类方法)
rpc.RegisterName("服务名", 回调对象)
// 2. 创建监听器
listener, err := net.Listen()
// 3. 建立连接
conn, err := listener.Accept()
// 4. 将连接绑定rpc服务
rpc.ServeConn(conn)
client端
// 1. 用rpc连接服务器
conn, err := rpc.Dial()
// 2. 调用远程函数
conn.Call("服务名.方法名", 传入参数, 传出参数)
RPC相关函数
- 调用远程函数 func (c *Client) Call(serviceMethod string, args interface{}, reply interface{}) error
- 绑定rpc服务 func (s *Server) ServeConn(conn io.ReadWriteCloser)
- 注册rpc服务 func (s *Server) RegisterName(name string, rcvr interface{}) error
rcvr对应rpc对象,该对象绑定方法需要满足如下条件:
a. 方法必须是导出的(包外可见,首字母大写)
b. 方法必须有两个参数, 都是导出类型、内建类型
c. 方法的第二个参数必须是"指针"(传出参数)
d. 方法只有一个 error 接口类型的返回值。
网友评论