RPC包的大致结构
网络协议 channels和Json格式的请求和回应的编码和解码都是同时与服务端和客户端打交道的类。网络协议channels主要提供连接和数据传输的功能。 json格式的编码和解码主要提供请求和回应的序列化和反序列化功能(Json -> Go的对象)。
源码解析
server.go
server.go主要实现了RPC服务端的核心逻辑。 包括RPC方法的注册, 读取请求,处理请求,发送回应等逻辑。 server的核心数据结构是Server结构体。 services字段是一个map,记录了所有注册的方法和类。 run参数是用来控制Server的运行和停止的。 codecs是一个set。 用来存储所有的编码解码器,其实就是所有的连接。 codecsMu是用来保护多线程访问codecs的锁。
client.go RPC客户端源码分析
客户端的主要功能是把请求发送到服务端,然后接收回应,再把回应传递给调用者。