在某种意义上,WebService、REST均是RPC的实现,那么RPC的发展过程如何呢?本文参考了wikipedia,对RPC做一下简要摘记。

RPC(RemoteProcedureCall),是进程间通信(IPC,Inter-Process Communication)的一种技术,一般指不同机器上的进程间通信。在采用C等古老语言编程的时候,RPC被称作了对S端的“子程序”的调用,所以称“过程调用”。在OOP出现后,RPC也可以称为远程方法调用(RemoteMethodInvocation),或者远程调用(RemoteInvocation)。

RPC过程可以是同步的,也可以是异步的。同步方式:C端向S端发送请求,阻塞等待;S端执行一段子程序,发送响应;C端继续执行;异步方式,比如XHTTP调用。

RPC的调用过程(Stub这个术语应该是借鉴了JavaRMI):

  1. Client向ClientStub发送请求(Call)。
  2. ClientStub对请求参数进行封包(也叫Marshalling),发出系统调用,OS向S端发送消息。
  3. S端接收到消息后,把封包消息传递给ServerStub。ServerStub解包(UnMarshalling)。
  4. ServerStub调用S端的子程序。处理完毕后,以同样的方式向C端发送结果。

注:ServerStub又叫Skeleton。

什么是Stub?

Stub是一段代码,用来转换RPC过程中传递的参数。处理内容包括不同OS之间的大小端问题。另外,Client端一般叫Stub,Server端一般叫Skeleton。

生产方式:1)手动生成,比较麻烦;2)自动生成,使用IDL(InterfaceDescriptionLanguate),定义C/S的接口。

交互机制标准:一般采用IDL,生成IDL的工具 RPCGEN()。

RPC相关实现方式

  • JavaRMI
  • XML-RPC,XML+HTTP来进行机器之间的调用
  • JSON-RPC
  • SOAP,XML-RPC的升级版
  • Facebook Thrift
  • CORBA
  • AMF,AdobeFlex
  • Libevent,是一个用于构建RPC Server和Client的框架。
  • WCF,来自微软
  • .net Remoting,逐步被WCF取代

Refer

http://en.wikipedia.org/wiki/Remote_procedure_call
http://en.wikipedia.org/wiki/Stub_(distributed_computing)

RPC简述的更多相关文章

  1. RPC调用框架比较分析

    什么是RPC: RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议. 简言之,RPC ...

  2. RabbitMQ中的RPC实现

    1.RPC简述 RPC,Remote Procedure Call 远程过程调用.通俗讲,两段程序不在同一个内存空间,无法直接通过方法名调用,就需要通过网络通信方式调用.对于RabbitMQ,本身就是 ...

  3. 服务化实战之 dubbo、dubbox、motan、thrift、grpc等RPC框架比较及选型

    转自: http://blog.csdn.net/liubenlong007/article/details/54692241 概述 前段时间项目要做服务化,所以我比较了现在流行的几大RPC框架的优缺 ...

  4. Hadoop2源码分析-RPC机制初识

    1.概述 上一篇博客,讲述Hadoop V2的序列化机制,这为我们学习Hadoop V2的RPC机制奠定了基础.RPC的内容涵盖的信息有点多,包含Hadoop的序列化机制,RPC,代理,NIO等.若对 ...

  5. dubbo、dubbox、motan、thrift、grpc等RPC框架比较及选型

    概述 前段时间项目要做服务化,所以我比较了现在流行的几大RPC框架的优缺点以及使用场景,最终结合本身项目的实际情况选择了使用dubbox作为rpc基础服务框架.下面就简单介绍一下RPC框架技术选型的过 ...

  6. RPC 调用简述

    首先了解什么叫RPC,为什么要RPC,RPC是指远程过程调用,也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网 ...

  7. 简述RPC原理实现

      前言 架构的改变,往往是因为业务规模的扩张. 随着业务规模的扩张,为了满足业务对技术的要求,技术架构需要从单体应用架构升级到分布式服务架构,来降低公司的技术成本,更好的适应业务的发展. 分布式服务 ...

  8. Spark RPC框架源码分析(一)简述

    Spark RPC系列: Spark RPC框架源码分析(一)运行时序 Spark RPC框架源码分析(二)运行时序 Spark RPC框架源码分析(三)运行时序 一. Spark rpc框架概述 S ...

  9. RPC框架原理简述:从实现一个简易RPCFramework说起(转)

    摘要: 本文阐述了RPC框架与远程调用的产生背景,介绍了RPC的基本概念和使用背景,之后手动实现了简易的RPC框架并佐以实例进行演示,以便让各位看官对RPC有一个感性.清晰和完整的认识,最后讨论了RP ...

随机推荐

  1. python----多继承C3算法

    https://blog.csdn.net/fmblzf/article/details/52512145

  2. SPOJ - MATSUM 二维树状数组单点更新

    忘记了单点更新时要在树状数组中减去原值..wa了一发 /* 矩形求和,单点更改 */ #include<iostream> #include<cstring> #include ...

  3. 关于ie7下display:inline-block;不支持的解决方案。

    摘要: 声明:此文章为转载(点击查看原文),如有侵权24小时内删除.联系QQ:1522025433. 今天码的时候遇到这个问题了. 如果本身是内联元素的,把它的display属性设置设置为inline ...

  4. python3 + selenium 之窗口切换

    窗口切换 此代码来源学习后对淘宝操作实践记录: 以下代码在Chrome61和IE11上正常运行,Firefox5.7上运行存在一些问题须改进,应该是火狐不兼容差link_text部分和循环经常报错,在 ...

  5. 正确停止线程的方式三 使用Thread类中的内置的中断标记位-----------不熟悉

    package charpter10; public class Processor implements Runnable { @Override public void run() { for ( ...

  6. 【LOJ】#2187. 「SHOI2014」三叉神经树

    题解 可以发现每次修改的是这个点往上一条连续的链,如果我要把1改成0,需要满足这一段往上的一部分都有两个1 如果我要把0改成1,需要满足这一段往上的部分有两个0 对于每个点记录1的个数,发现我们只会把 ...

  7. Asp.Net Core 2.0 项目实战(5)Memcached踩坑,基于EnyimMemcachedCore整理MemcachedHelper帮助类。

    Asp.Net Core 2.0 项目实战(1) NCMVC开源下载了 Asp.Net Core 2.0 项目实战(2)NCMVC一个基于Net Core2.0搭建的角色权限管理开发框架 Asp.Ne ...

  8. 【Java】 剑指offer(7) 二叉树的下一个结点

    本文参考自<剑指offer>一书,代码采用Java语言.  更多:<剑指Offer>Java实现合集 题目 给定一棵二叉树和其中的一个结点,如何找出中序遍历顺序的下一个结点?  ...

  9. 【Java】 剑指offer(61) 扑克牌的顺子

      本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连 ...

  10. css 选择器、元素默认宽度、media screen

    @media screen and (min-width:800px){ .a{  background: url('../image/banner/banner1.jpg') no-repeat l ...