,通过反射处理将方法取出,并存到map中.然后是网络调用,主要是监听端口,读取数据包,解码请求
调用反射处理后的方法,将返回值编码,返回给客户端.
2.1 方法注册
2.1.1 Register
//...,每次send一次请求,均生成一个call对象,并使用seq作为key保存在map中,服务端返回时从map取出call,进行相应处理
func (client *Client) send(call *Call...= nil {
//发送请求错误时,将map中call对象删除....异步调用超时后会内存泄漏
基于异步调用加channel实现超时功能也会存在泄漏问题,原因是client的请求会存在map结构中,Go函数退出并不会清理map的内容,因此如果server端不返回的话,map...总结
总的来说,go原生rpc算是个基础版本的rpc,代码精简,可扩展性高,但是只是实现了rpc最基本的网络通讯,像超时熔断,链接管理(保活与重连),服务注册发现,还是欠缺的,因此还是达不到生产环境开箱即用