RMI远程方法调用
- 格式:docx
- 大小:38.46 KB
- 文档页数:7
naming.lookup方法作用-概述说明以及解释1.引言1.1 概述在分布式系统中,naming.lookup方法是一个非常重要的函数。
它的作用是通过名称查找远程对象的引用,并将其返回给调用者。
在分布式环境中,通常会有许多远程对象存在,而这些对象通常由命名服务管理,而不是直接通过IP地址和端口号来进行访问。
这就需要使用naming.lookup方法来获取对远程对象的引用。
通过使用naming.lookup方法,分布式系统可以更加灵活和可扩展。
调用方不需要知道远程对象的具体位置,只需要知道对应的名称即可。
这样可以实现更好的模块化和解耦,使得系统更易于维护和扩展。
本文将深入探讨naming.lookup方法的定义、作用,以及使用该方法时需要注意的事项,同时也会通过实际示例演示该方法的应用场景,最后对naming.lookup方法的重要性进行总结,并展望未来对其的应用和发展。
json{"1.2 文章结构":{"本文将分为三个部分来探讨naming.lookup方法的作用和重要性。
首先在引言部分将对文章的整体内容进行概述,然后在正文部分详细介绍naming.lookup方法的定义、作用以及使用注意事项,最后通过示例应用来展示其在实际场景中的应用。
在结论部分将总结naming.lookup方法的重要性并展望未来对其的应用和发展。
"}}1.3 目的naming.lookup方法作为Java中的一个重要功能,其目的主要是为了实现分布式系统中的命名服务。
通过使用naming.lookup方法,可以方便地在网络上查找和获取远程对象的引用,从而实现远程方法调用和远程对象交互。
通过本文的分析和讨论,旨在帮助读者深入了解naming.lookup方法的定义、作用和应用场景,进而提高对分布式系统中命名服务的理解和应用能力。
同时,也旨在引导读者正确地使用naming.lookup方法,避免出现常见的错误和注意事项,从而更加高效地开发和运维分布式系统。
接⼝分类(http接⼝、api接⼝、RPC接⼝、RMI、webservice、Restfu。
在这之前⼀定要好好理解⼀下接⼝的含义,我觉得在这⼀类中接⼝理解成规则很恰当。
http接⼝:基于HTTP协议的开发接⼝.这个并不能排除没有使⽤其他的协议。
api接⼝:API(Application Programming Interface)应⽤程序编程接⼝,应⽤也包括⽹络应⽤程序,就像api⽂档基本上就是使⽤说明书,API接⼝可以简单理解成“应⽤程序使⽤接⼝”。
RPC接⼝:Remote Procedure Calls 远程过程调⽤ (RPC) 是⼀种协议,程序可使⽤这种协议向⽹络中的另⼀台计算机上的程序请求服务。
由于使⽤ RPC 的程序不必了解⽀持通信的⽹络协议的情况,因此 RPC 提⾼了程序的互操作性。
在 RPC 中,发出请求的程序是客户程序,⽽提供服务的程序是服务器。
RPC(远程过程调⽤)是⼀项⼴泛⽤于⽀持分布式应⽤程序(不同组件分布在不同计算机上的应⽤程序)的技术。
RPC 的主要⽬的是为组件提供⼀种相互通信的⽅式,使这些组件之间能够相互发出请求并传递这些请求的结果。
没有语⾔限制。
RMI:RMI(Remote Method Invocation,远程⽅法调⽤)RMI是针对于java语⾔的, RMI 允许您使⽤Java编写分布式对象Webservice接⼝:Webservice是系统对外的接⼝,⽐如你要从别的⽹站或服务器上获取资源或信息,别⼈肯定不会把数据库共享给你,他只能给你提供⼀个他们写好的⽅法来获取数据,你引⽤他提供的接⼝就能使⽤他写好的⽅法,从⽽达到数据共享的⽬的。
RESTful :简称 REST,是描述了⼀个架构样式的⽹络系统,其核⼼是⾯向资源,REST专门针对⽹络应⽤设计和开发⽅式,以降低开发的复杂性,提⾼系统的可伸缩性。
REST提出设计概念和准则为:1.⽹络上的所有事物都可以被抽象为资源(resource)2.每⼀个资源都有唯⼀的资源标识(resource identifier),对资源的操作不会改变这些标识3.所有的操作都是⽆状态的关于RPC和RMI的区别,各类博客有很多,我就不说了。
jrmp原理
JRMP(JavaRemoteMethodProtocol)是一种Java远程方法协议,它是基于TCP/IP之上,RMI协议之下的一种线路层协议。
它用于在不同的JVM之间进行远程方法调用,也就是RMI (RemoteMethodInvocation)。
JRMP协议的工作原理如下:
服务端创建一个实现了Remote接口的远程对象,并将其导出到RMI注册中心(Registry),指定一个名称和端口号。
客户端通过RMI注册中心的名称和端口号,查找到服务端的远程对象,并获取其存根(Stub)对象,这是一个实现了Remote接口的本地代理对象。
客户端通过存根对象,调用服务端的远程方法,存根对象会将方法名和参数封装成一个JRMP消息,并通过TCP连接发送给服务端。
服务端接收到JRMP消息后,根据方法名和参数,找到对应的远程对象,并调用其方法,将返回值封装成一个JRMP消息,并通过TCP 连接发送给客户端。
客户端接收到JRMP消息后,解析出返回值,并返回给调用者。
JRMP协议的优点和缺点如下:
优点:JRMP协议是为Java定制的,能够支持Java的对象序列化和反序列化,以及Java的异常处理机制,使得远程方法调用更加方便和高效。
缺点:JRMP协议是与Java绑定的,不能与其他语言的远程方法
调用协议兼容,如CORBA的IIOP协议,这限制了其跨平台的能力。
java分布式实现原理Java分布式实现原理分布式系统是指由多台计算机组成的系统,这些计算机通过网络进行通信和协调,共同完成复杂的任务。
Java是一种广泛使用的编程语言,它提供了一些工具和机制来实现分布式系统。
1. 网络通信:Java提供了Socket编程接口,可以通过套接字来在不同计算机之间进行网络通信。
通过建立输入和输出流,可以实现数据的传输和交换。
这样,在分布式系统中的不同计算机之间可以进行消息的发送和接收。
2. 远程方法调用(RPC):Java的RMI(远程方法调用)机制使得在不同计算机之间进行方法的调用变得简单。
通过定义接口和实现类,并通过RMI机制发布和获取远程对象,可以方便地在分布式系统中进行方法调用。
3. 分布式数据存储:Java提供了多种机制来进行分布式数据存储。
例如,Java的数据库连接池可以使用多个数据库连接,以实现对大型数据库的分布式访问。
此外,Java还提供了分布式缓存系统,如Redis和Memcached,用于在分布式系统中高效地存储和获取数据。
4. 分布式任务调度:Java的定时任务调度框架,如Quartz和Spring Scheduler,可以帮助实现分布式系统中的任务调度。
这些框架可以根据预定的时间表和条件触发任务的执行,从而实现任务的分布式调度和执行。
5. 分布式事务处理:Java的分布式事务处理框架,如Java Transaction API(JTA)和Java Transaction Service(JTS),可以帮助实现多个系统之间的事务管理。
这些框架提供了事务的协调和控制机制,确保分布式系统中的事务得以正确执行和提交。
总之,Java提供了许多工具和机制来实现分布式系统。
通过网络通信、远程方法调用、分布式数据存储、分布式任务调度和分布式事务处理等功能,可以将多个计算机连接成一个整体,协同工作,实现复杂任务的完成。
J2EE常见术语及缩写RMIRmote Method Invocation(远程方法调用)用于Java平台中的远程方法调用。
它具有分布式垃圾收集、可自动下载类文件等功能。
位于java.rmi包中。
注意:RMI只能在Java平台中使用。
通过RMI传输的参数必须可以序列化CORBACommon Object Request Broker Architecture(公共对象请求代理体系结构)用于实现独立于平台及编程语言的分布式应用ORBObject Request Broker(对象请求代理)负责具体的网络通信,是构建分布式应用的基础。
STUB与SKELETON存根与骨架无论是RMI还是ORB,其实现本质都是采用了代理模式。
其中存根为客户端使用的代理,拥有通过网络访问远程对象的能力;骨架为远程对象的代理,用来接受存根的调用,并返回结果。
附:在CORBA和JAVA 5中也支持动态调用,即存根不是必须存在的。
RMI-IIOPRemote Method Invocation over the Internet-ORB Protocol(基于互联网的对象请求代理协议实现的远程方法调用)J2EE和EJB事实上的网络通信标准,基于RMI,同时又兼容CORBA,使得EJB组件可以被Java 之外的客户端调用。
位于javax.rmi包中。
话题1:为何J2EE要兼容CORBACORBA是OMG(对象管理组织)推出的成功的分布式对象通信标准,为了占领企业级市场,EJB必须考虑和遗留系统的集成,以及为异构系统提供服务,这都需要采用更加通用的CORBA,而不是只能在Java平台下使用的RMI。
话题2:引入CORBA之后面临的问题1,分布式垃圾收集:并非所有支持CORBA的语言都有垃圾收集机制。
2,窄化(Narrowing):当通过RMI或RMI-IIOP获取一远程对象时,实际上获取的是其存根(Stub)。
在RMI中,会自动下载此存根;而CORBA没有这个机制,必须用额外的方法解决(其实是通过javax.rmi.PortableRemoteObject的narrow方法解决的)。
什么是远程过程调⽤什么是远程过程调⽤我们经常需要设计⼀个分布式系统,并通过分布式系统,实现程序跨计算机运⾏。
例如,为了建⽴⼀个⼤型的事务处理系统,需要⼀个专门服务器负责事务逻辑对象,另外专门设计⼀个服务器展⽰逻辑对象,诸如此类。
所有这些服务器相互之间都需要通信(见图14-1)。
为了这样的⼀个模型能正常⼯作,⼀台计算机的代码需要访问另⼀台计算机。
例如,位于服务器的程序需要在⼀个Web页⾯上显⽰⼀个订单列表,在这种情形下,它需要访问业务对象服务器上的程序,通过它读取订单列表,业务对象服务器⼜要访问数据库服务器。
当⼀台计算机上的程序调⽤另⼀台计算机的程序时,就称之为⼀次远程过程调⽤(Remote Procedure Call,RPC)。
为了执⾏⼀个远程过程调⽤,需要掌握以下内容:●被调⽤的代码驻留在哪⾥?当需要执⾏某个代码时,⾸先需要知道该代码在哪⾥?●调⽤这些代码需要参数吗?如果需要,参数的类型是什么?例如,如果我们想调⽤⼀个远程过程执⾏两个数的加法运算,则必须要把这两个数传递给这个过程。
●调⽤过程需要返回运算结果吗?如果需要,则返回值的类型是什么?例如,两个数相加的过程要返回第三个数,即它们的和。
图 14‑1此外,我们还需要解决⼤量的⽹络问题,把需要从⼀台计算机传送给另⼀台计算机的数据进⾏打包,以及其他很多问题。
正是由于这个原因,⼈们开发了许多RPC协议。
协议就是⼀组规则,有了这组规则,不同的应⽤程序甚⾄不同的计算机都可以相互通信。
例如,Internet上的计算机就是⽤TCP(传输控制协议)和IP(⽹际协议)两个协议进⾏通信的,因为它们规定了Internet上的数据传输过程和计算机寻址⽅法。
这些协议规定如何为远程计算机提供地址,如何把需要传送给远程过程的数据打包,如何读取响应信号,如何启动远程调⽤,如何进⾏纠错处理,以及处理所有与多个计算机之间通信有关的细节问题(这样的RPC协议通常都是建⽴在其他协议的基础上,例如,RPC协议规定在⽹络传输中必须使⽤TCP/IP协议)。
java rpc 方法===========一、介绍----RPC,即远程过程调用(Remote Procedure Call),是一种常见的编程范式,允许在两个不同的地方调用相同的数据结构和控制流程。
在Java环境中,使用RPC可以实现组件之间的解耦,提高系统的可扩展性和可维护性。
本篇文档将介绍Java中常见的RPC方法及其实现。
二、几种常见的Java RPC方法-------------1. **Java RMI(远程方法调用)**:Java RMI是Java提供的用于在不同Java虚拟机(JVM)之间进行通信的一种机制。
它允许远程对象调用在客户端代码中定义的方法。
2. **HTTP/RESTful API**:使用HTTP协议进行通信,通过定义一系列的HTTP方法(如GET、POST、PUT、DELETE等)来实现RPC调用。
Java中常用的框架如Spring MVC、Jersey等可以方便地实现RESTful API。
3. **gRPC**:gRPC是Google开发的一种高性能、开源的RPC框架,它支持多种语言,包括Java。
通过gRPC,可以在不同的系统之间进行高性能、高可靠性的通信。
4. **Thrift**:Thrift是一种跨语言的远程服务调用(RPC)框架,它支持多种编程语言,包括Java。
使用Thrift,可以很方便地定义服务接口,并生成相应的客户端和服务器代码。
5. **Dubbo**:Dubbo是阿里巴巴开源的一个高性能、轻量级的RPC框架,它支持多种通信协议和传输层协议,如HTTP/HTTPS、RMI、Kafka等,同时也支持负载均衡和容错。
三、Java RPC方法实现示例------------### 1. Java RMI示例首先,我们需要定义一个远程接口:```javainterface RemoteService extends Remote {void remoteMethod();}```接着,我们需要实现这个接口,并在服务器端注册这个远程对象:```javapublic class RemoteServiceImpl extends UnicastRemoteObject implements RemoteService {public RemoteServiceImpl() throws RemoteException { // 默认端口为1099,也可指定其他端口号}public void remoteMethod() {// 方法实现代码}}```在客户端,我们可以创建这个远程对象的引用并调用方法:```javaRemoteService remoteService = new RemoteServiceImpl(); // 创建远程对象引用remoteService.remoteMethod(); // 调用远程方法```### 2. HTTP/RESTful API示例(使用Spring MVC)首先,我们需要定义一个RESTful接口:```java@RestControllerpublic class RemoteServiceController {@GetMapping("/remoteMethod")public String remoteMethod() {// 方法实现代码return "远程方法调用成功";}}```然后,我们需要在前端发起HTTP请求来调用这个接口。
RMI学习+RMI反序列化RMI(Remote Method Invocation,远程⽅法调⽤),能调⽤远程虚拟机的对象的⽅法。
协议:Java本⾝对RMI规范的实现默认使⽤的是JRMP协议Weblogic中对RMI规范的实现使⽤T3协议。
nternet Inter-ORB协议(IIOP):基于CORBA实现的跨语⾔协议组成及实现1.服务器定义的可供远程调⽤的接⼝,需要继承Remote ,接⼝中定义了⼀个hello⽅法public interface rmidemo extends Remote { public String hello() throws RemoteException; }2.接⼝实现类,其中有⼀个私有的构造⽅法,和实现的接⼝中的hello⽅法public class RemoteHelloWorld extends UnicastRemoteObjectimplements rmidemo{ protected RemoteHelloWorld() throws RemoteException { System.out.println("构造⽅法");} public String hello() throws RemoteException{ System.out.println("hello⽅法被调⽤"); return "hello,world";}}1. 注册中⼼(也在服务端,开启⼀个rmi,也在服务端),其中利⽤Registry 创建了⼀个本地1099端⼝的rmi服务,服务绑定了RemoteHelloWorld对象,并将名i设置为了hello。
)public class servet{ public static void main(String[] args) throws RemoteException { rmidemo hello = new RemoteHelloWorld();//创建远程对象 Registry registry = LocateRegistry.createRegistry(1099);//创建注册表 registry.rebind("hello",hello);//将远程对象注册到注册表⾥⾯,并且设置值为hello } }1. 客户端(调⽤远程rmi的接⼝,实现接⼝的功能(这⾥⽤接⼝对象实现))public class clientdemo { public static void main(String[] args) throws RemoteException, NotBoundException { Registry registry = LocateRegistry.getRegistry("localhost", 1099);//获取远程主机对象 rmidemo hello = (rmidemo) registry.lookup("hello"); // 利⽤注册表的代理去查询远程注册表中名为hello的对象 System.out.println(hello.hello()); }// 调⽤远程⽅法并输出结果 }RMI反序列化前提1. 服务端存在利⽤链2. 服务端能上传⼀个object,传输的数据为序列化的数据。
RMI系统原理及使用方法论文导读:Java作为一种风靡一时的网络开发语言,其巨大的威力就体现在它强大的开发分布式网络应用的能力上,而RMI就是开发百分之百纯Java的网络分布式应用系统的核心解决方案之一。
关键词:RMI,JAVA,分布式远程方法调用Java RMI(RomoteMethod Invocation 远程方法调用)是用Java在JDK1.1中实现的,它大大增强了Java开发分布式应用的能力。
其实它可以被看作是RPC的Java版本。
但是传统RPC并不能很好地应用于分布式对象系统。
而Java RMI则支持存储于不同地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用。
RMI目前使用Java远程消息交换协议JRMP(Java Remote Messaging Rrotocol)进行通信。
JRMP是专为Java的远程对象制定的协议。
因此,Java RMI具有Java的”Write Once,Run Anywhere”的优点,是分布式应用系统的百分之百纯Java解决方案。
用Java RMI开发的应用系统可以部署在任何支持JRE的平台上。
发表论文。
但由于JRMP是专为Java对象制定的,因此,RMI对用用非Java语言开发的应用系统的支持不足。
不能与用非Java语言书写的对象进行通信。
RMI系统原理RMI应用程序通常包括两个独立的程序:服务器程序和客户机程序。
典型的服务器应用程序将创建多个远程对象,使这些远程对象能够被引用,然后等待客户机调用这些远程对象的方法。
而典型的客户机程序则从服务器中得到一个或多个远程对象的引用,然后调用远程对象的方法。
RMI为服务器和客户机进行通信和信息传递提供了一种机制。
在与远程对象的通信过程中,RMI使用标准机制:Stub和Skeleton。
远程对象的Stub担当远程对象的客户本地代表或代理人角色。
发表论文。
调用程序将调用本地Stub的方法,而本地Stub将负责执行对远程对象的方法调用。
第1篇1. 请简述JRS(Java RMI Server)的基本概念和作用。
JRS(Java RMI Server)是Java远程方法调用(Java Remote Method Invocation)的服务器端组件。
它允许一个Java程序在本地调用远程Java对象的方法,就像调用本地对象的方法一样。
JRS的主要作用是实现Java程序之间的分布式计算,使得不同主机上的Java程序可以相互通信和协同工作。
答案:JRS(Java RMI Server)是Java远程方法调用(Java Remote Method Invocation)的服务器端组件。
它允许一个Java程序在本地调用远程Java对象的方法,就像调用本地对象的方法一样。
JRS的主要作用是实现Java程序之间的分布式计算,使得不同主机上的Java程序可以相互通信和协同工作。
2. 请简述RMI的工作原理。
RMI(Java Remote Method Invocation)的工作原理如下:(1)客户端调用远程对象的方法时,会将调用请求发送到服务器。
(2)服务器端的RMI注册器(Registry)接收调用请求,并将请求转发给相应的远程对象。
(3)远程对象接收到调用请求后,执行方法并返回结果。
(4)服务器将结果返回给客户端。
答案:RMI(Java Remote Method Invocation)的工作原理如下:(1)客户端调用远程对象的方法时,会将调用请求发送到服务器。
(2)服务器端的RMI注册器(Registry)接收调用请求,并将请求转发给相应的远程对象。
(3)远程对象接收到调用请求后,执行方法并返回结果。
(4)服务器将结果返回给客户端。
3. 请说明RMI注册器(Registry)的作用。
RMI注册器(Registry)是RMI框架中用于存储和管理远程对象引用的服务器端组件。
它的主要作用如下:(1)提供远程对象引用的存储空间,使得客户端可以查询到远程对象。
JavaEE⼗三种规范JAVAEE平台由⼀整套服务(Services)、应⽤程序接⼝(APIs)和协议构成,它对开发基于Web的多层应⽤提供了功能⽀持,下⾯对JAVAEE中的13种技术规范进⾏简单的描述。
1、JDBC(Java Database Connectivity) JDBC API为访问不同的数据库提供了⼀种统⼀的途径,像ODBC⼀样,JDBC对开发者屏蔽了⼀些细节问题,另外,JDCB对数据库的访问也具有平台⽆关性。
2、JNDI(Java Naming and Directory Interface,Java命名和⽬录接⼝)JNDI是SUN公司提供的⼀种标准的Java命名系统接⼝,JNDI提供统⼀的客户端API,通过不同的访问提供者接⼝JNDI服务供应接⼝(SPI)的实现,由管理者将JNDI API映射为特定的命名服务和⽬录系统,使得Java应⽤程序可以和这些命名服务和⽬录服务之间进⾏交互。
在没有JNDI之前:开发的时候,在连接数据库代码中需要对JDBC驱动程序类进⾏应⽤,通过⼀个URL连接到数据库。
但是这样存在问题,⽐如我要改⼀种数据库,是不是要更换驱动,更换URL。
每次都要进⾏这些配置和管理。
在有了JNDI之后:可以在J2ee容器中配置JNDI参数,定义⼀个数据源,在程序中,通过数据源名称引⽤数据源从⽽访问后台数据库。
在程序中定义⼀个上下⽂类,然后⽤content.lookup("就可以成功引⼊数据源了。
在DataSource中事先建⽴多个数据库连接,保存在数据库连接池中,当程序访问数据库时,只⽤从连接池中取空闲状态的数据库连接即可,访问结束,销毁资源,数据库链接重新回到连接池例如:数据源定义3、EJB(Enterprise EJB是sun的JavaEE服务器端组件模型,设计⽬标与核⼼应⽤是部署分布式应⽤程序。
⽤通俗的话来理解,就是把已经打包好的东西放到服务器中去执⾏,这样是凭借了java跨平台的优势,利⽤EJB技术部署分布式系统可以不限于特定的平台。
Java RMI 技术原理(远程方法调用)Java RMI指的是远程方法调用。
它是一种机制,能够让在某个Java虚拟机上的对象调用另一个Java虚拟机中的对象上的方法。
可以用此方法调用的任何对象必须实现该远程接口。
Java RMI不是什么新技术(JDK1.1就有了),但却是是非常重要的底层技术。
大名鼎鼎的EJB都是建立在RMI基础之上的,现在还有一些开源的远程调用组件,其底层技术也是RMI。
在这个大力吹捧Web Service、SOA的年代,不是每个应用都应该选用笨拙的Web Service组件来实现,有人通过对比测试后,认为RMI是最简单的,在一些小的应用中是最合适的。
在Java中,只要一个类extends了
java.rmi.Remote接口,即可成为存在于服务器端的远程对象,供客户端访问并提供一定的服务。
注意:extends了Remote接口的类或者其他接口中的方法若是声明抛出了RemoteException异常,则表明该方法可被客户端远程访问调用。
同时,远程对象必须实现java.rmi.server.UniCastRemoteObject类,这样才能保证客户端访问获得远程对象时,该远程对象将会把自身的一个拷贝以Socket的形式传输给客户端,此时客户端所获得的这个拷贝称为“存根stub”,而服务器端本身已存在的远程对象则称之为“骨架skeleton”。
其实此时的Stub 是客户端的一个代理,用于与服务器端的通信,而Skeleton也可认为是服务器端的一个代理,用于接收客户端的请求之后调用远程方法来响应客户端的请求。
从客户对象经存根(Stub)、远程引用层(Remote Reference Layer)和传输层(Transport Layer)向下,传递给主机,然后再次经传输层,向上穿过远程
调用层和骨架(Skeleton),到达服务器对象。
Stub扮演着远程服务器对象的代理的角色,使该对象可被客户激活。
远程引用层处理语义、管理单一或多重对象的通信,决定调用发往一个服务器还是多个。
传输层管理实际的连接,并且追踪可以接受方法调用的远程对象。
服务器端的骨架(Skeleton)完成对服务器对象实际的方法调用,并获取返回值。
返回值向下经远程引用层、服务器端的传输层传递回客户端,再向上经传输层和远程调用层返回。
最后,Stub获得返回值。
要完成以上步骤需要有以下几个步骤:
1、生成一个远程接口
2、实现远程对象(服务器端程序)
3、生成Stub和Skeleton(服务器端程序)
4、编写服务器程序
5、编写客户程序
6、注册远程对象
7、启动远程对象
由于有RMI系统的支持,我们写RMI应用程序时只需要继承相关类,实现相关接口就可以了。
也就是说,我们只需要定义接口、接口实现、客户端程序和服务端程序就可以了。
用一个例子来说明整个过程。
定义一个远程接口,必须继承Remote接口,其中需要远程调用的方法必须抛出RemoteException异常。
远程的接口的实现
创建RMI注册表,启动RMI服务,并将远程对象注册到RMI注册表中。
客户端测试,在客户端调用远程对象上的远程方法,并返回结果。
运行结果:
1.启动Server端
2.启动Client端
从感觉上,觉得有点像在调用本地的方法,实际上是在远程对象上执行。