远程方法调用解读
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2018年12月2日 广州大学 Java网络编程 主讲:刘淼 12
举例:Fibonacci接口
P623
2018年12月2日
广州大学 Java网络编程 主讲:刘淼
13
实现远程接口
必须继承 java.rmi.server.UnicastRemoteObject 或 其子类。 UnicastRemoteObject 类实现了我们前面所讲的基 于 TCP/IP 的点对点通讯机制。该类构造函数的最 重要的作用就是调用 UnicastRemoteObject 类的 exportObject() 方法。导出(Export)对象是指使 远程对象准备就绪,可以接受进来的调用的过程。 而这个过程的最重要内容就是建立服务器套接字, 监听特定的端口,等待客户端的调用请求。
2018年12月2日
广州大学 Java网络编程 主讲:刘淼
4
与远程过程调用(RPC)的区别
RPC可以用于一个进程调用另一个进程(很可能在 另一个远程主机上)中的过程,从而提供了过程的 分布能力。 Java 的 RMI 则在 RPC 的基础上向前又迈进了一步, 即提供分布式 对象间的通讯,允许我们获得在远程 进程中的对象(称为远程对象)的引用,进而通过 引用调用远程对象的方法,就好像该对象是与你的 客户端代码同样运行在本地进程中一样。RMI 使用 了术语"方法"(Method)强调了这种进步,即在分 布式基础上,充分支持面向对象的特性。
2018年12月2日
广州大学 Java网络编程 主讲:刘淼
5
对象的串行化
在同一虚拟机上,当对象作为参数传递时, 是引用传递。 如何在不同虚拟机上传递对象?
将对象转化为字节序列,再将这些字节序列发送 给远程机器。-----类似传值调用 传递特殊的远程对象引用----当远程机器调用此 引用的方法时,该调用会通过Internet回到最初创 建此对象的机器,类似引用调用。
2018年12月2日 广州大学 Java网络编程 主讲:刘淼 9
RMI编程
1. 定义远程接口。这一步是通过扩展 java.rmi.Remote 接口,并定义所需的业 务方法实现的。 2. 定义远程接口的实现类。即实现上一步所 定义的接口,给出业务方法的具体实现逻 辑。 3. 编译远程接口和实现类,并通过 RMI 编译 器 rmic 基于实现类生成所需的 Stub 和 Skeleton 类。
编译客户程序: javac FibonacciClient.java 运行客户程序:java FibonacciClient rmi://localhost/fibonacci 0 1 2 3 4 5 55 155
第18章 远程方法调用
2018年12月2日
广州大学 Java网络ቤተ መጻሕፍቲ ባይዱ程 主讲:刘淼
1
学习目标
了解Java远程方法调用编程
2018年12月2日
广州大学 Java网络编程 主讲:刘淼
2
两大类网络应用程序
网络通信-----在程序之间移动文件和数据 分布式应用---就好象在本地一样
DCOM CORBA Java RMI-----Java分布式技术的基础 好处
RMI:综合运用。
2018年12月2日 广州大学 Java网络编程 主讲:刘淼 6
工作原理 P621 图1
2018年12月2日
广州大学 Java网络编程 主讲:刘淼
7
2018年12月2日
广州大学 Java网络编程 主讲:刘淼
8
如何定位远程对象?
RMI 的命名/注册服务正是解决这一问题的。
当服务器端想向客户端提供基于 RMI 的服务时,它需要 将一个或多个远程对象注册到本地的 RMI 注册表中。每 个对象在注册时都被指定一个将来用于客户程序引用该对 象的名称。 客户程序通过命名服务,指定类似 URL 的对象名称就可 以获得指向远程对象的远程引用。在 Naming 中的 lookup() 方法找到远程对象所在的主机后,它将检索该主 机上的 RMI 注册表,并请求所需的远程对象。如果注册 表发现被请求的远程对象,它将生成一个对该远程对象的 远程引用,并将其返回给客户端,客户端则基于远程引用 生成相应的 Stub 对象,并将引用传递给调用者。
2018年12月2日
广州大学 Java网络编程 主讲:刘淼
14
举例:FibonacciImpl类
P625
2018年12月2日
广州大学 Java网络编程 主讲:刘淼
15
服务器端注册
举例:FibonacciServer
P626
生成非守护进程,服务器程序继续运行。
2018年12月2日
广州大学 Java网络编程 主讲:刘淼
2018年12月2日
广州大学 Java网络编程 主讲:刘淼
10
2018年12月2日
广州大学 Java网络编程 主讲:刘淼
11
定义远程接口
远程接口必须直接或者间接的扩展自 java.rmi.Remote 接口。 远程方法必须声明抛出 java.rmi.RemoteException 异常。 在远程方法声明中,作为参数或者返回值的 远程对象,或者包含在其它非远程对象中的 远程对象,必须声明为其对应的远程接口, 而不是实际的实现类。
16
编写客户程序
举例:FibonacciClient
P629
2018年12月2日
广州大学 Java网络编程 主讲:刘淼
17
运行
编译服务器程序:javac FibonacciServer.java 生成桩类:rmic FibonacciImpl 启动服务器
启动注册表:rmiregistry & 新启动JVM,启动服务器:java FibonacciServer
负载均衡 减少数据通信量
2018年12月2日
广州大学 Java网络编程 主讲:刘淼
3
远程方法调用定义
Remote method invocation (RMI) is the action of invoking a method of a remote interface on a remote object. Most importantly, a method invocation on a remote object has the same syntax as a method invocation on a local object.
举例:Fibonacci接口
P623
2018年12月2日
广州大学 Java网络编程 主讲:刘淼
13
实现远程接口
必须继承 java.rmi.server.UnicastRemoteObject 或 其子类。 UnicastRemoteObject 类实现了我们前面所讲的基 于 TCP/IP 的点对点通讯机制。该类构造函数的最 重要的作用就是调用 UnicastRemoteObject 类的 exportObject() 方法。导出(Export)对象是指使 远程对象准备就绪,可以接受进来的调用的过程。 而这个过程的最重要内容就是建立服务器套接字, 监听特定的端口,等待客户端的调用请求。
2018年12月2日
广州大学 Java网络编程 主讲:刘淼
4
与远程过程调用(RPC)的区别
RPC可以用于一个进程调用另一个进程(很可能在 另一个远程主机上)中的过程,从而提供了过程的 分布能力。 Java 的 RMI 则在 RPC 的基础上向前又迈进了一步, 即提供分布式 对象间的通讯,允许我们获得在远程 进程中的对象(称为远程对象)的引用,进而通过 引用调用远程对象的方法,就好像该对象是与你的 客户端代码同样运行在本地进程中一样。RMI 使用 了术语"方法"(Method)强调了这种进步,即在分 布式基础上,充分支持面向对象的特性。
2018年12月2日
广州大学 Java网络编程 主讲:刘淼
5
对象的串行化
在同一虚拟机上,当对象作为参数传递时, 是引用传递。 如何在不同虚拟机上传递对象?
将对象转化为字节序列,再将这些字节序列发送 给远程机器。-----类似传值调用 传递特殊的远程对象引用----当远程机器调用此 引用的方法时,该调用会通过Internet回到最初创 建此对象的机器,类似引用调用。
2018年12月2日 广州大学 Java网络编程 主讲:刘淼 9
RMI编程
1. 定义远程接口。这一步是通过扩展 java.rmi.Remote 接口,并定义所需的业 务方法实现的。 2. 定义远程接口的实现类。即实现上一步所 定义的接口,给出业务方法的具体实现逻 辑。 3. 编译远程接口和实现类,并通过 RMI 编译 器 rmic 基于实现类生成所需的 Stub 和 Skeleton 类。
编译客户程序: javac FibonacciClient.java 运行客户程序:java FibonacciClient rmi://localhost/fibonacci 0 1 2 3 4 5 55 155
第18章 远程方法调用
2018年12月2日
广州大学 Java网络ቤተ መጻሕፍቲ ባይዱ程 主讲:刘淼
1
学习目标
了解Java远程方法调用编程
2018年12月2日
广州大学 Java网络编程 主讲:刘淼
2
两大类网络应用程序
网络通信-----在程序之间移动文件和数据 分布式应用---就好象在本地一样
DCOM CORBA Java RMI-----Java分布式技术的基础 好处
RMI:综合运用。
2018年12月2日 广州大学 Java网络编程 主讲:刘淼 6
工作原理 P621 图1
2018年12月2日
广州大学 Java网络编程 主讲:刘淼
7
2018年12月2日
广州大学 Java网络编程 主讲:刘淼
8
如何定位远程对象?
RMI 的命名/注册服务正是解决这一问题的。
当服务器端想向客户端提供基于 RMI 的服务时,它需要 将一个或多个远程对象注册到本地的 RMI 注册表中。每 个对象在注册时都被指定一个将来用于客户程序引用该对 象的名称。 客户程序通过命名服务,指定类似 URL 的对象名称就可 以获得指向远程对象的远程引用。在 Naming 中的 lookup() 方法找到远程对象所在的主机后,它将检索该主 机上的 RMI 注册表,并请求所需的远程对象。如果注册 表发现被请求的远程对象,它将生成一个对该远程对象的 远程引用,并将其返回给客户端,客户端则基于远程引用 生成相应的 Stub 对象,并将引用传递给调用者。
2018年12月2日
广州大学 Java网络编程 主讲:刘淼
14
举例:FibonacciImpl类
P625
2018年12月2日
广州大学 Java网络编程 主讲:刘淼
15
服务器端注册
举例:FibonacciServer
P626
生成非守护进程,服务器程序继续运行。
2018年12月2日
广州大学 Java网络编程 主讲:刘淼
2018年12月2日
广州大学 Java网络编程 主讲:刘淼
10
2018年12月2日
广州大学 Java网络编程 主讲:刘淼
11
定义远程接口
远程接口必须直接或者间接的扩展自 java.rmi.Remote 接口。 远程方法必须声明抛出 java.rmi.RemoteException 异常。 在远程方法声明中,作为参数或者返回值的 远程对象,或者包含在其它非远程对象中的 远程对象,必须声明为其对应的远程接口, 而不是实际的实现类。
16
编写客户程序
举例:FibonacciClient
P629
2018年12月2日
广州大学 Java网络编程 主讲:刘淼
17
运行
编译服务器程序:javac FibonacciServer.java 生成桩类:rmic FibonacciImpl 启动服务器
启动注册表:rmiregistry & 新启动JVM,启动服务器:java FibonacciServer
负载均衡 减少数据通信量
2018年12月2日
广州大学 Java网络编程 主讲:刘淼
3
远程方法调用定义
Remote method invocation (RMI) is the action of invoking a method of a remote interface on a remote object. Most importantly, a method invocation on a remote object has the same syntax as a method invocation on a local object.