关键词:RMI RPC CORBA
简 介:本篇文章重点阐述RMI,附带介绍RPC和CORBA Java远程方法调用(Java RMI)是一组实现了远程方法调用(rmi)的API。
  • java RMI是远程过程调用(RPC)的面向对象版等价概念,它还支持序列化的java类的直接转换以及分布式的垃圾回收(DGC)。
  • 换句话说,java RMI是面向对象的远程调用,属于PRC的一种特例。

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

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


  java1.2移除了skeleton对象

  下面是一个java  RMI的例子:

import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.rmi.registry.*;
public class RmiServer extends UnicastRemoteObject implements RmiServerIntf {
public static final String MESSAGE = "Hello World"; public RmiServer() throws RemoteException {
super(0); // required to avoid the 'rmic' step, see below
} public String getMessage() {
return MESSAGE;
} public static void main(String args[]) throws Exception {
System.out.println("RMI server started"); try { //special exception handler for registry creation
LocateRegistry.createRegistry(1099); //一个JVM可以创建一个记录器
System.out.println("java RMI registry created.");
} catch (RemoteException e) {
//do nothing, error means registry already exists
System.out.println("java RMI registry already exists.");
} //Instantiate RmiServer RmiServer obj = new RmiServer(); // Bind this object instance to the name "RmiServer"
Naming.rebind("//localhost/RmiServer", obj);//通过Naming源码可知,rebind方法将RmiServer类型的对象记录到了本地记录器
System.out.println("PeerServer bound in registry");
}
}
import java.rmi.Remote;
import java.rmi.RemoteException; /**
*这个接口需要提供给客户端,也就是提供服务getMessasge()
*/
public interface RmiServerIntf extends Remote {
public String getMessage() throws RemoteException;
}
import java.rmi.Naming;

/**
*这个就是客户端
*/
public class RmiClient {
public static void main(String args[]) throws Exception {
//客户端运用了服务器暴露的接口,也叫stub(存根)
RmiServerIntf obj = (RmiServerIntf)Naming.lookup("//localhost/RmiServer");
System.out.println(obj.getMessage());
}
}

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

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

RPC框架-RMI、RPC和CORBA的区别的更多相关文章

  1. C# -- 高性能RPC框架:Socean.RPC

    简介 Socean.RPC是一个.Net下的高性能RPC框架,框架以高性能.高稳定性为目标,底层基于socket,无第三方库引用,代码简洁,总代码量大约在2000行,框架性能较高,在普通PC上测试,长 ...

  2. 开源自己实现一个.net rpc框架 - Machete.Rpc

    Machete.Rpc Machete.Rpc 是一个轻量级的Rpc(远程过程调用的)框架.底层代理使用了Emit提高了效率,底层通信采用DotNetty框架以提升通信的效率.目前正在逐步完善中. G ...

  3. RPC框架-通俗易懂的解释

    早期单机时代,一台电脑上运行多个进程,大家各干各的,老死不相往来.假如A进程需要一个画图的功能,B进程也需要一个画图的功能,程序员就必须为两个进程都写一个画图的功能.这不是整人么?于是就出现了IPC( ...

  4. 远程通信机制RPC与RMI的关系

     1.RPC RPC(Remote Procedure Call Protocol)远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.RPC不依赖于具体的网 ...

  5. RPC 框架

    RPC 谁能用通俗的语言解释一下什么是 RPC 框架? - 远程过程调用协议RPC(Remote Procedure Call Protocol) RPC就是要像调用本地的函数一样去调远程函数. 推荐 ...

  6. Java实现简单的RPC框架

    一.RPC简介 RPC,全称为Remote Procedure Call,即远程过程调用,它是一个计算机通信协议.它允许像调用本地服务一样调用远程服务.它可以有不同的实现方式.如RMI(远程方法调用) ...

  7. Java实现简单的RPC框架(美团面试)

    一.RPC简介 RPC,全称为Remote Procedure Call,即远程过程调用,它是一个计算机通信协议.它允许像调用本地服务一样调用远程服务.它可以有不同的实现方式.如RMI(远程方法调用) ...

  8. Java实现简单RPC框架(转)

    一.RPC简介 RPC,全称Remote Procedure Call, 即远程过程调用,它是一个计算机通信协议.它允许像本地服务一样调用远程服务.它可以有不同的实现方式.如RMI(远程方法调用).H ...

  9. Java 实现简单的 RPC 框架

    RPC 简介 RPC,全称为 Remote Procedure Call,即远程过程调用,它是一个计算机通信协议.它允许像调用本地服务一样调用远程服务.它可以有不同的实现方式,而不需要了解底层网络技术 ...

随机推荐

  1. WPF调用zxing生成二维码

    1.登录http://zxingnet.codeplex.com/,下载对应.net版本的zxing库 2.引入zxing.dll 3.新建界面控件 using System; using Syste ...

  2. console命令的其他强大用法

    阅读目录 谷歌控制台Elements面板查看元素上绑定的事情样式操作总况console.logconsole.infoconsole.errorconsole.warnconsole.debugcon ...

  3. [JXOI2018]游戏

    嘟嘟嘟 九条可怜竟然有这种良心题,似乎稍稍刷新了我对九条可怜的认识. 首先假设我们求出了所有必须要筛出来的数m,那么\(t(p)\)就只受最后一个数的位置影响. 所以我们枚举最后一个数的位置,然后用组 ...

  4. Python:Day46 Javascript DOM

    history对象: History 对象包含用户(在浏览器窗口中)访问过的 URL.窗口之间是相互独立的. <input type="button" onclick=&qu ...

  5. 006_Python 异常处理

    python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误.你可以使用该功能来调试python程序. 异常处理: 本站Python教程会具体介绍. 断言(Assertions) ...

  6. 004_浅析Python的GIL和线程安全

    在这里我们将介绍Python的GIL和线程安全,希望大家能从中理解Python里的GIL,以及GIL的前世今生. 对于Python的GIL和线程安全很多人不是很了解,通过本文,希望能让大家对Pytho ...

  7. sqlplus编译失效对象

    原文整理自:http://www.51testing.com/?uid-16403-action-viewspace-itemid-98161:http://www.eygle.com/archive ...

  8. Run Redis

    Cmd window enter console Cd\ E: Cd E:\Graduration\Redis\github Run redis for window 64 After cmd ent ...

  9. unique

    作用: 元素去重,即“删除”序列中所有相邻的重复元素(只保留一个) (此处的删除,并不是真的删除,而是指重复元素的位置被不重复的元素占领了) (其实就是把多余的元素放到了最后面) 由于它“删除”的是相 ...

  10. AI 可视化

    可视化 参考链接: http://www.tensorfly.cn/tfdoc/how_tos/summaries_and_tensorboard.html