概述

RPC框架是云端服务基础框架之一,负责云端服务模块之间的项目调用,类似于本地的函数调用一样方便。常见的RPC框架配带的功能有:

  • 编解码协议。比如protobuf、thrift等等。
  • 服务发现。指服务提供者更新接口后,服务使用者如何知道该接口更新。Protobuf协议使用的是预编译方式,dubbo中使用的是zk作为媒介。
  • 负载均衡。
  • 流量控制、熔断。
  • 运维工具。

常见RPC框架有

  • 谷歌的GRPC。
  • 百度的BRPC。
  • 阿里的dubbo。
  • 脸书的thrift。
  • 腾讯的tars。

本系列主要教大家如何实现RPC框架,使用的语音是C++,协议使用的是protobuf。

基于protobuf的RPC框架

这里不介绍具体protoc的使用方法,网上很多。在完成protoc编译后,会输出protobuf提供的服务框架中,主要有如下几个类

  • Controller,主要是rpc通信过程的辅助接口,记录错误状态和简单的控制。
  • Service,指特定的一个服务。在protobuf中,一个服务(service)可以包含多个方法(method),通过service+method可以唯一确定一个过程。
  • Channel,指使用者和提供者直接的连接通道,是protobuf的核心,但是rpc框架开发者一般不直接调用该类,而是调用下面的stub(桩/存根)。
  • Stub,客户端使用的存根,通过该类去发起远程过程调用。至于为什么需要stub,笔者也还没有弄清楚。

在整体框架实现上基本上集成protobuf提供的类即可,采用boost的socket进行通信,暂时考虑同步通信的情况。

对于服务端和客户端的通信协议上,采用的meta对象,用于记录过程调用的参数、具体service和method。

服务端设计

采用boost的socket,直接bind和监听,启动后则通过accept进行阻塞,对于每个请求进行解包,并在ProcRpcMsg函数中对具体业务操作函数的调用,并在业务操作函数完成后通过done->Run()回调OnCallbackDone实现数据回写。

在service的callmethod方法中,对具体method进行调用。

此外,在服务和过程的管理上,服务端建立了key-val的map来进行管理。

客户端设计

客户端相对简单,也是基于boost的socket进行connect、send、receive等同步的操作。

在echo例子中,我们通常调用stub的函数,stub调用channel的Callmethod函数,因此我的操作需要在Channel::CallMethod中进行实现。

总结

本文简单介绍了基于protobuf的rpc框架实现,都是使用同步模型且单线程形式。这个程序在状态控制、并发高等上还不够,下篇文章讲如何提升收发效率。

代码路径:https://github.com/thszhong/srpc

RPC框架实现(一) Protobuf的rpc实现的更多相关文章

  1. rpc框架: thrift/avro/protobuf 之maven插件生成java类

    thrift.avro.probobuf 这几个rpc框架的基本思想都差不多,先定义IDL文件,然后由各自的编译器(或maven插件)生成目标语言的源代码,但是,根据idl生成源代码这件事,如果每次都 ...

  2. RPC 框架之 Goole protobuf

    Goole 的 protobuf  即 Protocol Buffers  是一个很好的RPC 框架,支持 c++ python  java 接下来进行官方文档的解读,然后你会对protobuf 会有 ...

  3. rpc框架之gRPC 学习 - hello world

    grpc是google在github于2015年开源的一款RPC框架,虽然protobuf很早google就开源了,但是google一直没推出正式的开源框架,导致github上基于protobuf的r ...

  4. Java实现简单的RPC框架(美团面试)

    一.RPC简介 RPC,全称为Remote Procedure Call,即远程过程调用,它是一个计算机通信协议.它允许像调用本地服务一样调用远程服务.它可以有不同的实现方式.如RMI(远程方法调用) ...

  5. RPC框架基础概念理解以及使用初体验

    RPC:Remote Procedure Call(远程服务调用) RPC是做什么的 通过RPC框架机器A某个进程可以通过网络调用机器B上的进程方法,就像在本地上调用一样. RPC可以基于HTTP或者 ...

  6. Java 实现简单的RPC框架

    0 引言 RPC,全称为Remote Procedure Call,即远程过程调用,它是一个计算机通信协议.它允许像调用本地服务一样调用远程服务.它可以有不同的实现方式.如RMI(远程方法调用).He ...

  7. Java实现简单RPC框架(转)

    一.RPC简介 RPC,全称Remote Procedure Call, 即远程过程调用,它是一个计算机通信协议.它允许像本地服务一样调用远程服务.它可以有不同的实现方式.如RMI(远程方法调用).H ...

  8. RPC 框架

    RPC 谁能用通俗的语言解释一下什么是 RPC 框架? - 远程过程调用协议RPC(Remote Procedure Call Protocol) RPC就是要像调用本地的函数一样去调远程函数. 推荐 ...

  9. 3 weekend110的hadoop中的RPC框架实现机制 + hadoop中的RPC应用实例demo

    hadoop中的RPC框架实现机制 RPC是Remotr Process Call, 进程间的远程过程调用,不是在一个jvm里. 即,Controller拿不到Service的实例对象. hadoop ...

随机推荐

  1. 【Spring Data 系列学习】Spring Data JPA 基础查询

    [Spring Data 系列学习]Spring Data JPA 基础查询 前面的章节简单讲解了 了解 Spring Data JPA . Jpa 和 Hibernate,本章节开始通过案例上手 S ...

  2. 用 Python 生成 HTML 表格

    在 邮件报表 之类的开发任务中,需要生成 HTML 表格. 使用 Python 生成 HTML 表格基本没啥难度, for 循环遍历一遍数据并输出标签即可. 如果需要实现合并单元格,或者按需调整表格样 ...

  3. almost最好的Vue + Typescript系列02 项目结构篇

    基于vue-cli 3.x,配合typescript的环境构建的新vue项目,跟以前的结构相比,有了一些变化,下面我们来简单的了解一下 基本结构: node_modules: 项目中安装的依赖模块 p ...

  4. TCP/IP基础总结性学习(6)

    HTTP 首部 一. HTTP 报文首部 1.HTTP 报文的结构: 2.HTTP 请求报文 图示: 举例子: 3.HTTP 响应报文: 下面的示例是访问 http://hackr.jp 时,请求报文 ...

  5. 简单易懂的Servlet路径问题

    关于servlet路径,我看了一下网上别人的博客园,发现都有一个通病,讲的太专业了,又抓不住关键部分,往往看一眼就不想看第二眼.所以我特地准备了初学者所通识的servlet路径问题. 1.标识符 /j ...

  6. IDEA Messages Build总是自动弹出提示错误

    IDEA,总是在代码未完成时,在进行切换页面回来后会跳出Messages Build,我相信大家在写java web项目的时候,经常会遇到这个问题,接下来我就和大家说一下问题所在. 主要原因是因为我们 ...

  7. frida报错frida.InvalidArgumentError: device not found问题解决方案

    一.问题描述     python安装好frida框架后,在安卓端启动了frida-server,启动要hook的应用,在cmd中执行python脚本,报错frida.InvalidArgumentE ...

  8. vue中数据请求的三种方法

    注意请求可能存在跨域问题,需要去配置好 这三种建议使用axios 1.resource Vue 要实现异步加载需要使用到 vue-resource 库. Vue.js 2.0 版本推荐使用 axios ...

  9. Robotutor Scratch3.0 在线编程平台升级啦!

    Robotutor推出的Scratch3.0在线编程平台受到很多编程老师和学员的喜爱,上一个版本我们提供了用户注册,找回密码,个人项目的在线保存和浏览,社区分享评论. 我们根据实际的教学需要,用户角色 ...

  10. 在云服务搭建jupyter环境

    一.环境配置 centeos7 python3 二.安装jupyter notebook 1.安装jupyter 安装Jupyter Notebook 通过pip安装Jupyter Notebook ...