开场白,这是一个关于RPC的相关概念的普及篇系列,主要是通过一步步的调整,提炼出一个相对完整的RPC框架。

RPC(Remote Procedure Call Protocol)——远程过程调用协议,基于C/S模型。网络上有一篇文章写得不错。能够去了解一下相关概念深入浅出RPC

这里,直接使用一下上面作者的一个示意图

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWluZGZsb2F0aW5n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

总结下来就是有4块核心内容

  1. RPC数据的传输。如上面的RPCConnector。RPCChannel。它们主要负责传输数据这一块。 详细client与server之间的连接是不是socket连接。是原始tcp连接还是使用http,这些RPC协议本身不做不论什么规定。

    那么我们的任务就是抽象出这样一个传输层。

  2. RPC消息。如上面的RPCProtocol, 以及encode,decode方法。

    由于RPC是远程调用。所以没办法直接函数调用。于是就必须用一套专门的协议,去表示调用以及调用结果。另外,由于实际应用基本都是跨机器连接,所以无法直接传递内存变量,也就是说还须要将消息编码成
    诸如字符串一类的能够跨设备传输的内容。详细的RPC消息的封装协议非常多,常见的是基于xml,json封装的。那么我们的任务就是抽象出这样一个协议层。

  3. RPC服务注冊。

    如上面Callee -->export。 服务端详细支持哪些调用。收到来自client的RPC请求后,如何去调用真正的须要运行的方法,这些内容也是一个完整的RPC框架必须考虑的。一些略微高级一点的框架,都是能够服务自己主动注冊的。如今主流的RPC框架,还支持通过 IDL(Interface
    Definition Language)来定义远程接口,实现跨语言的RPC 。那么我们的任务就是抽象出一个RPC服务的注冊机制

  4. RPC消息处理。如上面的RPCInvoker。这里事实上与RPC本身关系不大,一般就是考虑支持异步/同步调用。 这一部分,大概我也会做一些说明,但不是这个系列的重点。
这次RPC框架的搭建,庄稼人将採用python作为开发语言,原因嘛。还有点不好意思:代码量少。方便解释(偷懒是码工的天性)。初步的想法是。整个框架是从原始的普通调用開始,然后一步步的演化。最后生成一个完整的RPC框架。

希望在这个过程中,能带给各位同学更深刻的RPC入门知识。以及代码改动的知识。说得有点高了,呵呵。


一个简单RPC框架是怎样炼成的(I)——开局篇的更多相关文章

  1. 一个简单RPC框架是怎样炼成的(IV)——实现RPC消息的编解码

    之前我们制定了一个非常easy的RPC消息 的格式,可是还遗留了两个问题,上一篇解决掉了一个.还留下一个 我们并没有实现对应的encode和decode方法,没有基于能够跨设备的字符串传输,而是直接的 ...

  2. 一个简单RPC框架是怎样炼成的(V)——引入传输层

    开局篇我们说了,RPC框架的四个核心内容 RPC数据的传输. RPC消息 协议 RPC服务注冊 RPC消息处理    接下来处理传输数据.实际应用场景一般都是基于socket.socket代码比較多, ...

  3. 一个简单RPC框架是怎样炼成的(II)——制定RPC消息

    开局篇我们说了,RPC框架的四个核心内容 RPC数据的传输. RPC消息 协议 RPC服务注冊 RPC消息处理 以下,我们先看一个普通的过程调用 class Client(object): def _ ...

  4. 一个简单RPC框架是怎样炼成的(VI)——引入服务注冊机制

    开局篇我们说了.RPC框架的四个核心内容 RPC数据的传输. RPC消息 协议 RPC服务注冊 RPC消息处理 接下来处理RPC服务的注冊机制.所谓注冊机制,就是Server须要声明支持哪些rpc方法 ...

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

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

  6. 一个入门rpc框架的学习

    一个入门rpc框架的学习 参考 huangyong-rpc 轻量级分布式RPC框架 该程序是一个短连接的rpc实现 简介 RPC,即 Remote Procedure Call(远程过程调用),说得通 ...

  7. RPC笔记之初探RPC:DIY简单RPC框架

    一.什么是RPC RPC(Remote Procedure Call)即远程过程调用,简单的说就是在A机器上去调用B机器上的某个方法,在分布式系统中极其常用. rpc原理其实很简单,比较容易理解,在r ...

  8. 基于Netty和SpringBoot实现一个轻量级RPC框架-协议篇

    基于Netty和SpringBoot实现一个轻量级RPC框架-协议篇 前提 最近对网络编程方面比较有兴趣,在微服务实践上也用到了相对主流的RPC框架如Spring Cloud Gateway底层也切换 ...

  9. 基于Netty和SpringBoot实现一个轻量级RPC框架-Server篇

    前提 前置文章: Github Page:<基于Netty和SpringBoot实现一个轻量级RPC框架-协议篇> Coding Page:<基于Netty和SpringBoot实现 ...

随机推荐

  1. JSP执行原理图

  2. Unity相机平滑跟随

    简介 unity中经常会用到固定视角的相机跟随,然后百度发现大家都是自己写的,然后偶也写咯一个,分享一下 PS: 由于刚学C#不久,才发现delegate这个东东,也不知道对性能影响大不大,但是看MS ...

  3. Struts之 拦截器配置 ( Interceptor )

    struts2体系结构的核心就是拦截器. 以链式执行,对真正要执行的方法(execute())进行拦截.首先执行Action配置的拦截器,在Action和Result执行之后,拦截器再一次执行(与先前 ...

  4. es6杂记

    es6杂记 let 和 const let 仅在代码块里有效 { let a = 10; var b = 1; } a // ReferenceError: a is not defined. b / ...

  5. 清除Linux系统多余引导选项

    由于我把系统给升级(update)了,在grub引导模式出现新旧版本(Grub与Grub2)的引导系统分别为正常启动和进入恢复模式各2个引导项,如下图显示:百度找不到相关或类似的教程,只好半夜起来研究 ...

  6. Spring学习_day02_AOP,AspectJ,JdbcTemplate

    本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 谢谢配合! Spring_day02 一.AOP面向切面编程 1. ...

  7. IF ERRORLEVEL 和 IF %ERRORLEVEL% 区别

      IF ERRORLEVEL 1 ( command )    与  IF %ERRORLEVEL%  LEQ 1 ( command  )  等效 也就是 ERRORLEVEL 1 等效于 &qu ...

  8. PHP 之微信JSSDK类封装

    <?php class JSSDK { private $appId; private $appSecret; public function __construct($appId, $appS ...

  9. ionic 创建某个文件下的page

    ionic g page 文件名 --pagesDir src/pages/about

  10. 多目标跟踪笔记三:Global Data Association for Multi-Object Tracking Using Network Flows

    Abstract 针对用于多目标跟踪的数据关联(data association),本文提出了一种基于网络流(network flow)的优化方法.将最大后验概率(maximum-a-posterio ...