远程过程调用 RPC——服务端注册实现原理分析
rpc server 代码参考我前一篇博文:https://www.cnblogs.com/zuoyang/p/18146870
RPC Server端的RPC代码架构主要由两大部分构成:
-
-
-
第一部分是服务方法的注册过程。在这个过程中,我们首先通过调用
rpc.Register
接口将服务对象(如示例中的StringService
)的方法进行注册。rpc.Register
函数内部会利用反射机制,自动提取出服务对象中满足RPC接口要求的方法(即那些接收两个参数且返回error
类型结果的方法),并将这些方法的信息存储在一个内部的方法映射表中。在我们的Server端代码中,rpc.Register(service)
这行代码就完成了StringService
中的Concat
和Diff
方法的注册,使得这些方法可以被远程调用。 -
第二部分是处理来自网络的RPC调用。Server端会监听指定的端口(如示例中的
:1234
),等待客户端的连接。一旦有客户端连接成功,Server就会读取传入的数据包,解码RPC请求,并根据请求中指定的方法名从方法映射表中查找到对应的方法。然后,Server会通过反射调用该方法,将结果编码后发送回客户端。在我们的Server端代码中,这部分逻辑是通过l.Accept()
接受连接,并使用rpc.ServeConn(conn)
来处理每一个RPC请求实现的。
-
第一部分是服务方法的注册过程。在这个过程中,我们首先通过调用
-
关于第一部分的处理步骤,可以概括为以下几个环节:
-
-
-
首先,通过
rpc.Register(service)
注册StringService
中的RPC
方法,如Concat
。 -
接着,
rpc
包利用Go语言的反射功能,自动获取已注册方法的详细信息,如方法名、参数类型和返回值类型等。 -
最后,这些信息被保存在
RPC
服务器的内部数据结构中,以便在处理客户端的RPC
调用时能够快速定位和执行相应的方法。
-
首先,通过
-
标签:调用,精讲,rpc,Server,RPC,注册,Go,方法 From: https://www.cnblogs.com/zuoyang/p/18147730