1.什么是RPC?
RPC 远过程调用.在理解远程调用之前,首先我们来了解一下本地调用,只有更好的理解了本地调用,才能更好的理解RPC.
1.1 本地调用ex:本地的函数调用在函数调用的时候,一般会经过几个步骤 返回地址入栈参数入栈提升堆栈空间函数参数的复制执行函数调用清空堆栈
1.2.为什么需要RPC?ex:两台机器 一台机器想调用另一台机器的函数执行某个功能 由于是两个不同的进程 我们无法使用函数指针来调用该函数而只能通过网络请求来调用的具体函数1.3.那么如何知道需要具体调用的函数呢?(关联)
两台机器之间可以各自维护一个关联式容器 从而找到要调用的函数1.4一次完整的RPC调用流程1.client 以本地的方式进行的调用服务2.client stub接收到调用后负责将方法 参数等组装成能够进行网络传输的消息体3.cleint stub找到服务端的地址 并将消息发送给server stub4.server stub收到消息后进行解码5.server stub根据解码结果调用本地的服务6.本地服务执行结果并将结果返回后给server stub7.server stub将返回结果打包成消息并发送至消费方8.client stub接受到消息9. client得到返回结果
2.为什么需要proto buffer?
在许多高级语言中,我们都是使用类的方式对数据进行封装,而利用网络传递数据只能以二进制的方式进行传输,因此我们需要将数据转化为二进制数据从而在网络上进行传播过程称为序列化, 再将接收到的数据从二进制转化为对应的数据类型,称为反序列化.
3.什么是Proto buffer?
proto buffer是Google使用的一个开源软件 ,数据打包小 传输数据快
4.Proto buffer基础教程
proto buffer协议的格式.proto文件package name;//可以理解为c++中的名称空间message dataname; //message可以理解为c++中的class 或者structrequried type name = 1 //消息的接收方和发送发都必须提供required修饰字段的值opitional type name = 2 //可选择的=1 =2 表示唯一标记的tag(maybe传输的过程中传递的是tag 让后通过tag找到对应的数据)
通过proto buffer 提供的编译器会生成对应的cc和h文件protoc -I=$SRC_DIR --cpp_out=$DST_DIR $SRC_DIR/XXX.proto
4.gRPC基础教程?