什么是远程过程调用

什么是远程过程调用

  

我们经常需要设计一个分布式系统,并通过分布式系统,实现程序跨计算机运行。例如,为了建立一个大型的事务处理系统,需要一个专门服务器负责事务逻辑对象,另外专门设计一个服务器展示逻辑对象,诸如此类。所有这些服务器相互之间都需要通信(见图14-1)。

为了这样的一个模型能正常工作,一台计算机的代码需要访问另一台计算机。例如,位于服务器的程序需要在一个Web页面上显示一个订单列表,在这种情形下, 它需要访问业务对象服务器上的程序,通过它读取订单列表,业务对象服务器又要访问数据库服务器。当一台计算机上的程序调用另一台计算机的程序时,就称之为 一次远程过程调用(Remote Procedure Call,RPC)。

   为了执行一个远程过程调用,需要掌握以下内容:

●       被调用的代码驻留在哪里?当需要执行某个代码时,首先需要知道该代码在哪里?

●       调用这些代码需要参数吗?如果需要,参数的类型是什么?例如,如果我们想调用一个远程过程执行两个数的加法运算,则必须要把这两个数传递给这个过程。

●       调用过程需要返回运算结果吗?如果需要,则返回值的类型是什么?例如,两个数相加的过程要返回第三个数,即它们的和。

图 14‑1

此外,我们还需要解决大量的网络问题,把需要从一台计算机传送给另一台计算机的数据进行打包,以及其他很多问题。正是由于这个原因,人们开发了许多RPC协议。

协议就是一组规则,有了这组规则,不同的应用程序甚至不同的计算机都可以相互通信。例如,Internet上的计算机就是用TCP(传输控制协议)和IP(网际协议)两个协议进行通信的,因为它们规定了Internet上的数据传输过程和计算机寻址方法。

  

这些协议规定如何为远程计算机提供地址,如何把需要传送给远程过程的数据打包,如何读取响应信号,如何启动远程调用,如何进行纠错处理,以及处理所有与多 个计算机之间通信有关的细节问题(这样的RPC协议通常都是建立在其他协议的基础上,例如,RPC协议规定在网络传输中必须使用TCP/IP协议)。

用Sockets API和TCP/IP协议调用服务器上的定制方法,程序员必须创建一种方式,让服务器分析数据流,以调用相应的方法。为了使这个过程更容易实现,一些公司 创建了RPC(远程过程调用,Remote Procedure Calls)协议,例如Open Software Foundation公司(OSF)创建的、仍很流行的DCE-RPC (Distributed Computing Environment - Remote Procedure Calls)协议,该公司后来变成Open Group(参阅www.opengroup.org站 点上的信息)。使用RPC可以用IDL(接口定义语言,Interface Definition Language)格式定义方法,服务器必须执行该方法,客户机也可以调用它。现在不再需要定义定制协议,分析请求代码,以调用方法了,这些工作都由一个 特定的程序来完成,该程序称为stub,由一个接口编译器生成。

RPC用于调用方法,这表示我们必须进行过程化编程。RPC技术推出得较晚,那时大多数开发商已经开始使用面向对象的方式编程了。为了在这些技术之间搭起桥梁,又开发出了几种技术,包括CORBA和DCOM。

1. CORBA

Object Management Group(OMG,www.omg.org) 在1991年开发出了CORBA(公用对象请求代理程序体系结构,Common Object Request Broker Architecture),把面向对象技术添加到网络编程中。许多销售商如Digital Equipment、HP、IBM和其他销售商都提供CORBA服务器。但因为OMG没有定义引用执行代码,只有一个规范,所以这些销售商的服务器都不能 交互操作。HP服务器需要一个HP客户机,IBM服务器需要一个IBM客户机等。

2. DCOM

在Windows NT 4中,Microsoft用面向对象的功能扩展了DCE-RPC协议。DCOM (Distributed COM)可以在网络上调用COM组件,并用于COM+应用程序。几年后,Microsoft操作系统需要使用DCOM,Microsoft就对其他带有 The Active Group的操作系统开放了该协议。DCOM可以用于Unix、VMS和IBM系统,但主要用于Microsoft环境,把它用于其他系统所做的努力并不 成功。哪个IBM大型机管理员愿意在自己的系统中加入一些Microsoft技术呢?

3. RMI

Sun公司对自己的Java技术采用了不同的方式。在纯粹的Java环境中,RMI (远程方法调用,Remote Method Invocation)协议可以用于远程调用对象。Sun公司添加了一些与CORBA和COM的桥梁技术,但它的主要目的是让人们使用只有Java的解决 方案。

转载于:https://www.cnblogs.com/yours369000/archive/2009/08/21/1551564.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: UDP远程过程调用是一种基于UDP协议的远程过程调用技术,它可以让不同的计算机之间进行通信和数据交换,实现分布式计算。相比于TCP协议,UDP协议具有更低的延迟和更高的传输速度,但是不保证数据的可靠性和顺序性。因此,在使用UDP远程过程调用时需要注意数据的正确性和完整性。 ### 回答2: UDP远程过程调用(UDP-RPC)是一种网络通信协议,用于在计算机网络上进行分布式系统中的远程过程调用(RPC)。它基于用户数据报协议(UDP)进行通信,并通过UDP数据报在客户端和服务器之间传输数据。 与传统的RPC协议(如基于传输控制协议(TCP)的RPC)相比,UDP-RPC更加轻量级和简单。它不像TCP-RPC那样有连接建立和维护的开销,也没有数据包的确认和重传机制,因此更加适用于一些对实时性要求较高的场景。 在UDP-RPC中,客户端通过发送UDP数据报来调用远程服务器上的过程。服务器接收到请求后,执行相应的操作,并将结果通过UDP数据报发送回客户端。由于UDP协议的特性,数据报的到达顺序和完整性不能保证,因此在实现UDP-RPC时需要采取一些处理机制,如重试、超时、丢包检测等,以确保通信的可靠性和正确性。 UDP-RPC的优势在于它的轻量级和快速响应。相比于TCP-RPC,UDP-RPC的数据包开销更小,传输速度更快,因此在网络带宽有限或延迟较高的情况下,UDP-RPC表现更佳。而且UDP-RPC适用于一些对实时性要求较高、不太关注数据可靠性的场景,如多媒体传输、实时游戏等。 然而,UDP-RPC也存在一些限制。由于UDP协议本身不提供连接性和可靠性保证,因此应用层需要自行处理这些问题,增加了复杂性。另外,UDP-RPC没有流量控制和拥塞控制机制,可能会导致网络拥塞和丢包的问题。 总之,UDP远程过程调用是一种基于UDP协议的轻量级分布式系统中的远程过程调用方式,具有快速响应和简单实现的特点,适用于一些对实时性要求较高的场景,但也需要注意处理可靠性和拥塞控制的问题。 ### 回答3: UDP远程过程调用(UDP RPC)是一种通过UDP协议在分布式系统中进行远程过程调用(RPC)的通信方式。RPC是一种允许在不同的计算机之间进行通信和数据交换的技术。 UDP是一种无连接的、不可靠的传输协议,与TCP相比,它的开销较小,在实时性要求较高的场景中常被使用。而RPC则是一种将远程计算机上的函数或服务封装为本地调用的方式,使得开发人员可以像调用本地函数一样调用远程函数。 UDP RPC的工作原理是将函数调用的参数打包成UDP数据包,并将其发送到远程计算机上的服务端。服务端接收到数据包后,提取出函数参数并执行相应的函数。执行结果再打包成UDP数据包,通过网络返回给客户端。 UDP RPC的优点是简单、快速、开销低。由于UDP是无连接的,不需要在通讯之前建立连接,减少了额外的传输开销。并且由于UDP本身不提供可靠性保证,开发人员可以根据需求自行实现数据丢失和重传机制,提高了传输效率。此外,UDP RPC也适用于实时交互和多播通信的场景。 然而,UDP RPC也存在一些缺点。由于UDP是不可靠的,当通信发生错误或数据包丢失时,无法进行重传,需要开发人员自行实现错误处理和容错机制。此外,UDP RPC对于大规模系统的扩展性较差,因为传输过程中无法保证数据包的顺序和完整性,需要额外的工作来处理这些问题。 综上所述,UDP远程过程调用是一种通过UDP协议实现的分布式系统中的远程过程调用方式,它通过将函数调用的参数打包成UDP数据包,以实现不同计算机之间的通信和数据交换。它的特点是简单、快速、开销低,适用于实时交互和多播通信的场景,但也存在一些缺点,需要开发人员自行处理错误和容错机制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值