server.go
方法注册:
因为从client我们知道是复用的socket来实现并发调用rpc方法,我们先从方法注册来看源码部分:
请求调用:
方法已经被注册成功,接下来我们看看是如何客户端发送请求调用的:
资源重用:
上面把大致的rpc请求都说明了,server有一个技巧是重用对象,这里使用的是链表方式处理的:
最后,sending这把锁的目的是避免同一个套接字快速请求中避免返回包写入乱序,因此避免一个包完整写入完毕才允许下一个返回写入套接字。通过rpc包源码解析,可以看到标准库中的核心思想还是channel+mutex实现复用对象,以及各种方式的复用,避免GC压力,在我们以后写高性能服务端可以借鉴的地方。