RPC框架-RMI、RPC和CORBA的区别

释放双眼,带上耳机,听听看~!

1
2
3
4
5
1关键词:RMI RPC CORBA  
2简  介:本篇文章重点阐述RMI,附带介绍RPC和CORBA  
3  Java远程方法调用(Java RMI)是一组实现了远程方法调用(rmi)的API。
4
5
  • java RMI是远程

过程调用(RPC)的面向对象版等价概念,它还支持序列化的java类的直接转换以及分布式的垃圾回收(DGC)。

  • 换句话说,java RMI是面向对象的远程调用,属于PRC的一种特例。

  • RMI的最初实现依赖于java虚拟机的类展现机制,故其只支持从一个JVM到另一个JVM的调用。底层协议只支持java实现就是java远程方法协议(JRMP)

  • 为了支持运行在一个非JVM上下文的代码,开发人员后来开发了一个CORBA版本(javax.rmi.CORBA)

RPC框架-RMI、RPC和CORBA的区别
java1.2移除了skeleton对象

下面是一个java  RMI的例子:

RPC框架-RMI、RPC和CORBA的区别RPC框架-RMI、RPC和CORBA的区别


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
1import java.rmi.Naming;
2import java.rmi.RemoteException;
3import java.rmi.server.UnicastRemoteObject;
4import java.rmi.registry.*;
5public class RmiServer extends UnicastRemoteObject implements RmiServerIntf {
6    public static final String MESSAGE = "Hello World";
7
8    public RmiServer() throws RemoteException {
9        super(0);    // required to avoid the 'rmic' step, see below
10    }
11
12    public String getMessage() {
13        return MESSAGE;
14    }
15
16    public static void main(String args[]) throws Exception {
17        System.out.println("RMI server started");
18
19        try { //special exception handler for registry creation
20            LocateRegistry.createRegistry(1099); //一个JVM可以创建一个记录器
21            System.out.println("java RMI registry created.");
22        } catch (RemoteException e) {
23            //do nothing, error means registry already exists
24            System.out.println("java RMI registry already exists.");
25        }
26          
27        //Instantiate RmiServer
28
29        RmiServer obj = new RmiServer();
30
31        // Bind this object instance to the name "RmiServer"
32        Naming.rebind("//localhost/RmiServer", obj);//通过Naming源码可知,rebind方法将RmiServer类型的对象记录到了本地记录器
33        System.out.println("PeerServer bound in registry");
34    }
35}
36

View Code

RPC框架-RMI、RPC和CORBA的区别RPC框架-RMI、RPC和CORBA的区别


1
2
3
4
5
6
7
8
9
10
1import java.rmi.Remote;
2import java.rmi.RemoteException;
3
4/**
5*这个接口需要提供给客户端,也就是提供服务getMessasge()
6*/
7public interface RmiServerIntf extends Remote {
8    public String getMessage() throws RemoteException;
9}
10

View Code

RPC框架-RMI、RPC和CORBA的区别RPC框架-RMI、RPC和CORBA的区别


1
2
3
4
5
6
7
8
9
10
11
12
13
1import java.rmi.Naming;
2
3/**
4*这个就是客户端
5*/
6public class RmiClient {
7    public static void main(String args[]) throws Exception {
8        //客户端运用了服务器暴露的接口,也叫stub(存根)
9        RmiServerIntf obj = (RmiServerIntf)Naming.lookup("//localhost/RmiServer");
10        System.out.println(obj.getMessage());
11    }
12}
13

View Code

***stub,存根,这个词有点像会计学里的术语,想想坐公交、飞机,售票员总会留个底,你持有票据的另一半,这样双方就不会引起误会扯皮了。服务器提供的这个存根也是同理,就相当于一层协议,好让客户端请求服务器提供的服务。当然了,除了核心机制,计算机和现实的售票存在较大差异。

上面的例子,我是运行在了一台机器上,大家可以试试多台机器的远程调用,或者多个JVM之间进行调用。

 

转载于:https://www.cnblogs.com/InformationGod/p/9192266.html

给TA打赏
共{{data.count}}人
人已打赏
安全经验

海外中文博客与Adsense

2021-10-11 16:36:11

安全经验

安全咨询服务

2022-1-12 14:11:49

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索