RPC机制
Seafile-Server中使用 libsearpc来实现远程过程调用。
Searpc是基于GObject系统的简单C语言RPC框架。Searpc处理RPC的序列化/反序列化部分,传输部分留给用户。
序列化/反序列化通过json-glib库使用JSON格式。执行RPC函数后,已序列化的json对象从服务器返回到客户端。服务器端定义的每个RPC函数都应使用一个额外的GError参数来报告错误。
一次完整的RPC调用流程(同步调用、异步另说)如下:
1)服务消费方client调用以本地调用方式调用服务;
2)client stub接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体;
3)client stub找到服务地址,并将消息发送到服务端;
4)server stub收到消息后进行解码;
5)server stub根据解码结果调用本地的服务;
6)本地服务执行并将结果返回给server stub;
7)server stub将返回结果打包成消息并发送至消费方;
8)client stub接收到消息,并进行解码;
9)服务消费方得到最终结果。
RPC框架的目的就是将2)-8)步骤封装起来,让用户对这些细节透明。