RMI基础
基本概念
RMI是Remote Method Invocation(远程方法调用)的缩写。它可以实现一个JVM中的代码(客户端)通过网络远程调用另一个JVM(服务端)的某个方法。
具体的实现方法是,服务器提供具体的类和方法,然后客户端获得远程类的一个代理,然后通过这个代理调用远程对象的方法,方法的参数是通过序列化与反序列化的方式传递的。
实现方式
Rmi有三个主体
- Client(客户端):可以远程调用服务段的方法
- Server(服务端):远程方法的提供者,代码被执行的地方,执行结束之后,返回执行的结果给客户端
- Registry(注册表):存放着远程对象的位置(ip、端口、标识符),相当于一个字典,用于客户端寻找可以执行的方法
其中Server与Registry可以在同一服务器上实现,也可以布置在不同服务器上。一个rmi的调用流程如下
- 先启动服务端,监听一个端口,一般是1099端口
- Server向Registry注册远程对象
- Client从Registry获取远程对象代理信息,然后通过这个代理调用方法,Server端的代理会收到Client端的调用的方法、参数等,然后代理执行对应方法,并将结果通过网络返回给Client。
代码实现
项目结构
先创建一个接口
1 | package model; |
服务端实现这个接口
1 | package model.impl; |
Server实现的是注册功能
1 | package server; |
client通过localhost的1099端口找到hello实例进行调用
1 | package client; |
调用结果
先启动Server注册实例,然后再运行Client即可看见调用的结果。
参考:https://github.com/Maskhe/javasec/blob/master/6.java%20rmi%E5%9F%BA%E7%A1%80.md