1 RPC介绍

RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协 议。 RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息的到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。RPC有多种模式和执行,目前使用最多的是开放式软件基础的DCE(分布式计算环境)。在分布式环境中,客户机和服务器在不同的机器上运行,客户端调用在服务器端运行的过程,并把结果发送回客户机。这称为远程过程调用 (RPC),是 RPC 编程的基础。使用 RPC 编程是在分布式环境中运行的客户机和服务器应用程序之间进行可靠通信的最强大、最高效的方法之一。

2.RPC执行流程:

R一次客户机对服务器的RPC调用,其内部操作大致有如下十步:

 

  1.调用客户端句柄;执行传送参数

 

  2.调用本地系统内核发送网络消息

 

  3.消息传送到远程主机

 

  4.服务器句柄得到消息并取得参数

 

  5.执行远程过程

 

  6.执行的过程将结果返回服务器句柄

 

  7.服务器句柄返回结果,调用远程系统内核

 

  8.消息传回本地主机

 

  9.客户句柄由内核接收消息

 

  10.客户接收句柄返回的数据

3、远程过程协议架构

远程过程协议由两个不同的结构组成:调用信息和答复信息

3.1  RPC 调用信息:每条远程过程调用信息包括以下无符号整数字段,以独立识别远程过程:  struct call_body {

 

  unsigned int rpcvers;

 

  unsigned int prog;

 

  unsigned int vers;

 

  unsigned int proc;

 

  opaque_auth cred;

 

  opaque_auth verf;

 

  1 parameter

 

  2 parameter . . . };

3.2 RPC 答复信息:RPC 协议的答复信息的改变取决于网络服务器对调用信息是接收还是拒绝。答复信息请求包括区别以下情形的各种信息:

  RPC 成功执行调用信息。.

 

  RPC 的远程实现不是协议第二版,返回 RPC 支持的最低和最高版本号。

 

  在远程系统中,远程程序不可用。

 

  远程程序不支持被请求的版本号。返回远程程序所支持的最低和最高版本号。

 

  请求的过程号不存在。通常是呼叫方协议或程序差错。

 

  RPC答复信息形式如下:

 

  enum reply_stat stat

 

  {MSG_ACCEPTED = 0,

 

  MSG_DENIED = 1 };

  RPC 成功执行调用信息。.

 

  RPC 的远程实现不是协议第二版,返回 RPC 支持的最低和最高版本号。

 

  在远程系统中,远程程序不可用。

 

  远程程序不支持被请求的版本号。返回远程程序所支持的最低和最高版本号。

 

  请求的过程号不存在。通常是呼叫方协议或程序差错。

 

  RPC答复信息形式如下:

 

  enum reply_stat stat

 

  {MSG_ACCEPTED = 0,

 

  MSG_DENIED = 1 };

 

RPC介绍以及编程的更多相关文章

  1. [Hadoop入门] - 1 Ubuntu系统 Hadoop介绍 MapReduce编程思想

    Ubuntu系统 (我用到版本号是140.4) ubuntu系统是一个以桌面应用为主的Linux操作系统,Ubuntu基于Debian发行版和GNOME桌面环境.Ubuntu的目标在于为一般用户提供一 ...

  2. RabbitMQ介绍4 - 编程(C#客户端示例)

    C#终端的说明文档: http://www.rabbitmq.com/dotnet-api-guide.html 这里介绍使用RabbitMQ的几种典型场景. 1. 简单direct模式( http: ...

  3. RPC介绍

    转载http://blog.csdn.net/mindfloating/article/details/39474123/ 近几年的项目中,服务化和微服务化渐渐成为中大型分布式系统架构的主流方式,而 ...

  4. 简单介绍shell编程四剑客之awk

    概要:分别的作用 grep:文本过滤(模式:pattern)工具,grep,egrep,fgrep,擅长过滤. sed:stream editor 文本编辑工具:(流编辑器),擅长取行.替换. awk ...

  5. 【STM8】STM8S介绍(编程环境、烧录、芯片内容)(Vcap需要一个电容接地)

    这篇博客的介绍大纲 [1]我使用的开发板和烧录器 [2]编程环境 [3]烧录软件和界面 [4]芯片内容 [1]我使用的开发板和烧录器 首先,我用的是STM8S003F3P6这款开发板,淘宝上就有了,5 ...

  6. 如何向新手程序员介绍Java编程

    学习Java,他们都说很easy. 作为一名刚从斯康星大学麦迪逊分校计算机科学系毕业的大学生,我通过一些编程课程认识了很多使用Java的朋友.现在很多学校都在从别的编程语言(大多是C ++)转教Jav ...

  7. 简单介绍shell编程四剑客之grep

    概要:分别的作用 grep:文本过滤(模式:pattern)工具,grep,egrep,fgrep,擅长过滤. sed:stream editor 文本编辑工具:(流编辑器),擅长取行.替换. awk ...

  8. 【转】RPC介绍

    转自:http://www.cnblogs.com/Vincentlu/p/4185299.html 摘要: RPC——Remote Procedure Call Protocol,这是广义上的解释, ...

  9. golang rpc介绍

    rpc包提供了通过网络或其他I/O连接对一个对象的导出方法的访问.服务端注册一个对象,使它作为一个服务被暴露,服务的名字是该对象的类型名.注册之后,对象的导出方法就可以被远程访问.服务端可以注册多个不 ...

随机推荐

  1. leetcode_question_111 Minimum Depth of Binary Tree

    Given a binary tree, find its minimum depth. The minimum depth is the number of nodes along the shor ...

  2. 微软Code Hunt答案(00-05)——沉迷娱乐的我

    昨天看到微软出的网游Code Hunt.o(∩_∩)o...哈哈,还不好好玩一吧,个人感觉不是一个模块比一个模块难的,Code Hunt是按功能划分.所以不要怕自己做不来.由于不同人特长不一样. 像A ...

  3. jQuery学习笔记(一)——基础选择器、过滤选择器、表单选择器

    $()就是jQuery中的函数,它的功能是获得()中指定的标签元素.如演示样例中$("p")会得到一组P标签元素,当中"p"表示CSS中的标签选择器.$()中的 ...

  4. google自定义站内搜索

    ttps://www.google.com/cse/docs/cref.html?hl=zh-cn 重要表单参数: action 字段:您希望存储结果的网址(在该例中,我们使用 http://www. ...

  5. 发送通知:Notification

    Intent的主要功能是完成一个Activity跳转到其他Activity或者是Service的操作,表示的是一种 操作的意图. PendingIntent表示的是暂时执行的一种意图,是一种在产生某一 ...

  6. Nginx 在安装入门

    1.首先需要安装必要的库,PCRE,zlib sudo apt-get install libpcre3 libpcre3-dev 假设找不到文件的话就下载源文件进行安装. 2.解压下载的nginx源 ...

  7. SharePoint2010 Form验证配置流程

    1.修改管理中心的Web.config文件,位置:C:\inetpub\wwwroot\wss\VirtualDirectories\42903 2.修改应用程序的Web.config文件,位置:C: ...

  8. poj1487

    题目大意: 给一棵递归树,看链接图片,从根节点开始对于每个节点往它的子节点移动,直到叶子节点停止.每个节点选哪一个孩子节点继续往下走是随机的(等概率).然后叶子节点都会标记一个数值,记为走到该节点的得 ...

  9. Android StrictMode介绍

    转:http://www.blueowls.net/android-strictmode%E4%BB%8B%E7%BB%8D/ /** * enables "strict mode" ...

  10. xtrabackup 链接不上MySQL的问题

    先看问题: [root@localhost ~]# innobackupex --user=root --password=131417 /backup InnoDB Backup Utility v ...