rpc简介、原理、实例-缘于difx

NFS quotas:Cannot register service: RPC: Authentication error 重启nfs服务出现错误提示: Starting NFS quotas: Cannot register service: RPC: Authentication error; why = Client credential too weak rpc.rquotad: unable to register (RQUOTAPROG, RQUOTAVERS, udp). 之前都是没问题的。 测试另一台服务器,错误雷同,只不过是中文提示。 仔细回想修改过的什么配置... ... ... 查阅. 阅读详情

简介

RPC(Remote Procedure Call,远程过程调用)是建立在Socket之上的,出于一种类比的愿望,在一台机器上运行的主程序,可以调用另一台机器上准备好的子程序,就像LPC(本地过程调用).越底层,代码越复杂、灵活性越高、效率越高;越上层,抽象封装的越好、代码越简单、效率越差。Socket和RPC的区别再次说明了这点。在传统的编程概念中,过程是由程序员在本地编译完成,并只能局限在本地运行的一段代码,也即其主程序和过程之间的运行关系是本地调用关系。因此这种结构在网络日益发展的今天已无法适应实际需求。众所周知,传统过程调用模式无法充分利用网络上其他主机的资源(如CPU、Memory等),也无法提高代码在实体间的共享程度,使得主机资源大量浪费。

      通过RPC我们可以充分利用非共享内存的多处理器环境(例如通过局域网连接得多台工作站),这样可以简便地将你的应用分布在多台工作站上,应用程序就像运行在一个多处理器的计算机上一样。你可以方便的实现过程代码共享,提高系统资源的利用率,也可以将以大量数值处理的操作放在处理能力较强的系统上运行,从而减轻前端机的负担。

    RPC作为普遍的C/S开发方法,开发效率高效,可靠.但RPC方法的基本原则是--以模块调用的简单性忽略通讯的具体细节,以便程序员不用关心C/S之间的通讯协议,集中精力对付实现过程.这就决定了 RPC生成的通讯包不可能对每种应用都有最恰当的处理办法,与Socket方法相比,传输相同的有效数据,RPC占用更多的网络带宽.
  RPC是在Socket的基础上实现的,它比socket需要更多的网络和系统资源.另外,在对程序优化时,程序员虽然可以直接修改由rpcgen产生的令人费解的源程序,但对于追求程序设计高效率的RPC而言,获得的简单性则被大大削弱.

RPC的结构原理及其调用机制

如前所述RPC其实也是种C/S的编程模式,有点类似C/S Socket 编程模式,但要比它更高一层。当我们在建立RPC服务以后,客户端的调用参数通过底层的RPC传输通道,可以是UDP,也可以是TCP(也即TI-RPC—无关性传输),并根据传输前所提供的目的地址及RPC上层应用程序号转至相应的RPC应用程序服务端,且此时的客户端处于等待状态,直至收到应答或Time Out超时信号。当服务器端获得请求消息,则会根据注册RPC时告诉RPC系统的例程入口地址,执行相应的操作,并将结果返回至客户端。

当一次RPC调用结束后,相应线程发送相应的信号,客户端程序才会继续运行。

在这个过程中,一个远程过程是有三个要素来唯一确定的:程序号、版本号和过程号。

程序号是用来区别一组相关的并且具有唯一过程好的远程过程。一个程序可以有一个或几个不同的版本,而每个版本的程序都包含一系列能被远程调用的过程,通过版本的引入,使得不同版本下的RPC能同时提供服务。每个版本都包含有许多可供远程调用的过程,每个过程则有其唯一标示的过程号。

基于RPC的应用系统开发

通过以上对RPC原理的简介后,我们再来继续讨论如何来开发基于RPC的应用系统。

一般而言在开发RPC时,我们通常分为三个步骤:

a、 定义说明客户/服务器的通信协议:这里所说的通信协议是指定义服务过程的名称、调用参数的数据类型和返回参数的数据类型,还包括底层传输类型(可以是UDP或TCP),当然也可以由RPC底层函数自动选择连接类型建立TI-RPC。最简单的协议生成的方法是采用协议编译工具,常用的有Rpcgen,我会在后面实例中详细描述其使用方法。

b、  开发客户端程序。

c、  开发服务器端程序。

开发客户端和服务器端的程序时,RPC提供了我们不同层次的开发例程调用接口。不同层次的接口提供了对RPC不同程度控制。一般可分为5个等级的编程接口,接下来我们分别讨论一下各层所提供的功能函数。

简单层例程

简单层是面向普通RPC应用,为了快速开发RPC应用服务而设计的,他提供了如下功能函数。

  函数名

             功能描述

Rpc_reg( )

在一特定类型的传输层上注册某个过程,来作为提供服务的RPC程序

Rpc_call( )

远程调用在指定主机上指定的过程

Rpc_Broadcast( )

向指定类型的所有传输端口上广播一个远程过程调用请求

                                

高层例程

在这一层,程序需要在发出调用请求前先创建一个客户端句柄,或是在侦听请求前先建立一个服务器端句柄。程序在该层可以自由的将自己的应用绑在所有的传输端口上,它提供了如下功能函数。

          

  函数名

             功能描述

Clnt_create( )

程序通过这个功能调用,告诉底层RPC服务器的位置及其传输类型

Clnt_create_timed( )

定义每次尝试连接的超时最大时间

Svc_create( )

在指定类型的传输端口上建立服务器句柄,告诉底层RPC事件过程的相应入口地址

Clnt_call()

向服务器端发出一个RPC调用请求

中间层例程

中间层向程序提供更为详细的RPC控制接口,而这一层的代码变得更为复杂,但运行也更为有效,它提供了如下功能函数。

  函数名

             功能描述

Clnt_tp_create( )

在指定的传输端口上建立客户端句柄

Clnt_tp_create_timed( )

定义最大传输时延

Svc_tp_creaet( )

在指定的传输端口上建立服务句柄

Clnt_call( )

向服务器端发出RPC调用请求

                

专家层例程

这层提供了更多的一系列与传输相关的功能调用,它提供了如下功能函数。

 

  函数名

             功能描述

Clnt_tli_create( )

在指定的传输端口上建立客户端句柄

Svc_tli_create( )

在指定的传输端口上建立服务句柄

Rpcb_set( )

通过调用rpcbind将RPC服务和网络地址做映射

Rpcb_unset( )

删除rpcb_set( ) 所建的映射关系

Rpcb_getaddr( )

调用rpcbind来犯会指定RPC服务所对应的传输地址

Svc_reg( )

将指定的程序和版本号与相应的时间例程建起关联

Svc_ureg( )

删除有svc_reg( ) 所建的关联

Clnt_call( )

客户端向指定的服务器端发起RPC请求

底层例程

该层提供了所有对传输选项进行控制的调用接口,它提供了如下功能函数。

  函数名

             功能描述

Clnt_dg_create( )

采用无连接方式向远程过程在客户端建立客户句柄

Svc_dg_create( )

采用无连接方式建立服务句柄

Clnt_vc_create( )

采用面向连接的方式建立客户句柄

Svc_vc_create( )

采用面向连接的方式建立RPC服务句柄

Clnt_call( )

客户端向服务器端发送调用请求

实例介绍

以下我将通过实例向读者介绍通过简单层RPC的实现方法。通常在此过程中我们将使用RPC协议编译工具—Rpcgen。Rpcgen 工具用来生成远程程序接口模块,它将以RPC语言书写的源代码进行编译,Rpc 语言在结构和语法上同C语言相似。由Rpcgen 编译生成的C源程序可以直接用C编译器进行编译,因此整个编译工作将分为两个部分。Rpcgen的源程序以.x结尾,通过其编译将生成如下文件:

a) 一个头文件(.h)包括服务器和客户端程序变量、常量、类型等说明。

b) 一系列的XDR例程,它可以对头文件中定义的数据类型进行处理。

c)  一个Server 端的标准程序框架。

d) 一个Client 端的标准程序框架。

   当然,这些输出可以是选择性的,Rpcgen 的编译选项说明如下:

  选项

功能

‘-’ a

生成所有的模板文件

‘-’ Sc

生成客户端的模板文件

‘-’ Ss

生成服务器端的模板文件

‘-’ Sm

生成Makefile 文件


ti-rpc:基于swoole封装的一个简易的JSON协议的RPC框架,思路是层叠的,代码是自己写的。小修小改的,目前服务于前公司(注意是前公司)生产环境,每日支撑大约8000万次调用 钛RPC swoole版本说明 这个,这个玩意在swoole 1.x系列和swoole 2.x系列里是没什么问题的。但是swoole 4可能发生的一些变化我建议是:swoole 4情况下,不优先考虑这个;如果一定要考虑,自己修一下吧。因为swoole后面是重协程的,而我们这个玩意主要思路还是多进展方式。至于会不会改进做一个协程版本的:会做。但是没有经历至少几十万用户验证前,我应该不会轻易扔出来的。 ,但贵在经历过百万级的用户体量考验。 简要概述: 封装的比较简单,代码风格略粗暴,没有过多的组件以及厚重的包装,我不太喜欢过于复杂的东西。整体思路是蓝天的,代码则自己实现(你也可以认为是抄袭),自己 立即下载

相关推荐

Zephyr,设备树概述

Zephyr使用设备树(DTS)描述硬件配置,通过设备树源码和绑定文件生成C头文件供开发使用。设备树采用树状结构,节点对应硬件设备,属性描述硬件特性。示例展示了I2C总线及其外设的节点层级关系,包括单元地址、兼容性标识等关键属性。构建系统将设备树转换为devicetree.h中的宏,使开发者能通过DT_前缀宏访问硬件信息,同时保留Kconfig覆盖默认值的能力。

汽车电子软件领域知识分享 722

RPC 测试报错Unkown protocol(com.boco.hadoop.client.LoginServiceInterface)

瞎碰终于找到原因了     下图为项目的目录结构(包含服务端与客户端)      LoginControllerer.java代码如下: public class LoginController {  public static void main(String[] args) throws Exception {   LoginServiceInterfac

Hypora的博客 966

Tesseral 建立地震模型

0. 前言 本节内容主要是总结如何使用 Tesseral 工具建立模型。 1. 模型建立步骤 设置模型的宽度和深度 此处默认都为1000,之后点击“确定” 建立地层 绘制新的地层 右键点击“New polygon” 绘制地层,设置第二个层的名字和纵波速度 绘制第三层,第三层覆盖在前一个层上 第四层如上,第四层如果是最后一层,绘制该层时,要将深度1000包围。 设置观测系统 设置炮点 设置子波为雷克子波,频率设置为30 检波点设置 运行模型 设置好如上选择后,

weixin_41857483的博客 6539

Linux下启动nfs服务报错

这两天在迁移阿里云服务器,因为是灾备服务器,长期没有使用,而当时服务器也没能成功挂载,这次迁移也想把这个问题解决了。 网上找了各种方法,先重启rpcbind,再重启nfs,无论怎么重启,都报“Starting NFS quotas: Cannot register service: RPC: Authentication error; why = Client credential to

eip777的博客 7321

沈阳计算机研究所复试,沈阳计算所复试试题附答案.doc

沈阳计算所复试试题附答案目录数据结构1200612007220085200914操作系统16200616200718200818200919组成原理20200620200720200821200921经典算法22数据结构2006数据结构部分(共25分,第1题10分,第2题15分)在(下图)所示的有向图中:v1 v2v4 ...

weixin_42511053的博客 862

使用CubeMX配置STM32H7的FreeRTOS

本文将介绍如何使用CubeMX配置STM32H7的FreeRTOS,并提供相应的源代码示例。通过使用CubeMX,你可以轻松地配置FreeRTOS和系统资源,并生成相应的初始化代码和配置文件。在"FreeRTOS"选项卡的"Tasks"部分,可以配置系统中的任务。首先,打开CubeMX软件。在"FreeRTOS"选项卡的"Resources"部分,你可以配置FreeRTOS使用的资源,例如,堆内存和信号量。例如,我们可以创建两个简单的任务,一个任务将在循环中切换LED的状态,另一个任务将通过串口打印消息。

JeeVue的博客 711

【亲测免费】 Ti-RPC 开源项目教程

Ti-RPC 开源项目教程 1. 项目介绍 Ti-RPC 是一个基于 Swoole 封装的简易 JSON 协议的 RPC 框架。该项目的思路借鉴了其他 RPC 框架,但代码是独立编写的,并经过了小修小改。目前,Ti-RPC 服务于前公司的生产环境,每日支撑大约 8000 万次调用。 主要特点: 基于 Swoole:利用 Swoole 的高性能特性,提供高效的 RPC 服务。 JSON 协议:采用...

gitblog_00269的博客 931

UG\NX二次开发 分割曲线

分割曲线没有ufun函数?那就换一种思路实现。

王牌飞行员_里海的博客 1145

关于rpc简介、原理、实例-缘于difx

关于rpc简介、原理、实例-缘于difx        今天稍微研究了一下关于rpc的东东,主要是因为Pro.Z碰到的问题,在解决了以后,对rpc产生了一些兴趣,考虑到我目前的程序也可以从比较底层的socket方式概率为rpc方式,看的过程中,看到了一个网上的实例教程,估计已经转载了N遍了,所以有几个错误,包括rpc unknown protocal、confliction define和cann

我们编程吧 654

5、模糊风险评估

本文介绍了基于模糊逻辑的风险评估方法,探讨了如何在不确定、不完整信息环境下进行高效的风险分析。文章涵盖了模糊集合与隶属度函数的基本概念、模糊推理系统的流程,并结合犯罪风险、金融风险和医疗诊断等实际案例,展示了模糊风险评估的应用价值和技术细节。此外,还介绍了模糊贝叶斯网络、模糊综合评价等进阶工具与方法,为多领域风险管理提供了理论支持和实践指导。

mango的博客 180

人工智能技术基础系列之:迁移学习

作者:禅与计算机程序设计艺术 1.背景介绍 随着深度学习和神经网络的快速发展,越来越多的应用场景需要处理大量的数据和复杂的任务。然而,由于计算资源、存储空间等条件的限制,传统的人工智能方法往往不能满足实际需求。因此,为了提高效率和降低成本,研究人员提出了迁移学习的概念。本篇文章将详细介绍迁移学习的基

AI天才研究院 699

跟我一起学“网络安全”通识-Windows

本篇文章是《跟我一起学“网络安全”通识》的第二章,介绍了Windows操作系统里的一系列基础知识,包括:Windows常用dos命令、WindowsServer搭建AD域、Windows之震网三代漏洞实验等。

Cool_foolisher的博客 3536

SAP Business Technology Platform 支持的技术栈

SAP Business Technology Platform(简称 BTP)是 SAP 提供的一个综合技术平台,旨在帮助企业实现业务转型和创新。BTP 融合了数据库管理、应用开发、集成、分析和智能技术,为企业提供从基础架构到端到端应用的全面服务。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1567

RPC 问题记录

RPC 常见错误及解决

Sensente的博客 3620

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【网络】Socket | RPC 通信细节 知识点

程序设计实践》第9章中提到,“大端”和“小端”可以追溯到1726年的Jonathan Swift的《格列佛游记》,其中一篇讲到有两个国家因为吃鸡蛋究竟是先打破较大的一端还是先打破较小的一端而争执不休,他们分别被称为"大端(big-endian)派"和"小端(little-endian)派",因为这种争执,甚至爆发了战争,其中一个皇帝送了命,另一个丢了王位。例如,一个4字节的int类型变量a,其存储的起始地址为0x100,那么a的4个字节将被分别存在0x100,0x101,0x102,0x103的位置。

无数_Mirage的博客 1492

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

RPC和Socket的区别

RPC和Socket的区别   2011-04-01 14:45:40|  分类: android学习|字号 订阅 RPC和Socket的区别 From: http://hi.baidu.com/renyangok/blog/item/a856922370d909ffd7cae28c.html 2010-03-17 14:33

bjdu_jlxs的专栏 992

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

RPC简单实例

什么是RPC? 远程过程调用(Remote Procedure Call,RPC)是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一台计算机的子程序,同时将网络的通信细节隐藏起来,而程序员无需额外的为这个交互作用编程。RPC采用客户机/服务器模型。 请求过程如图: 客户端程序->客户端Stub程序 ->通信模块 -> 远程请求 -> 通信模块 -> 调度程序 -> 服务器端Stub程序 -> 服务程序 ** 实例代码: ** package org.e

sunqingok的博客 2313

RPC 的详细使用

关于 Go 语言中 RPC 的使用!

qq_46457076的博客 3947
上一篇: 六大Web负载均衡原理与实现
下一篇: 消息队列设计精要
youbo_sun
博客等级 码龄12年 20粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值