Java远程方法调用

Java远程方法调用(RMI)技术详解 Java RMI(远程方法调用)采用三层架构实现分布式通信,包含注册表服务、服务端和客户端三大核心组件。服务端通过导出远程对象并绑定到注册表,客户端通过接口契约查找并调用远程方法。RMI采用租约机制管理远程对象生命周期,通过引用计数和定期续租实现分布式垃圾回收。开发时需要严格分离服务端与客户端代码,通过模块化部署确保安全性,并注意注册表必须与服务器同机部署。RMI架构隐藏了底层网络通信细节,使远程调用语法与本地调用保持一致,同时处理了对象定位、参数序列化和异常处理等分布式环境下的复杂问题。 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 概述   Java Remote Method Invocation ( RMI -- Java远程方法调用)允许您使用Java编写分布式对象。本文将介绍RMI的优点以及如何将其连接到现有的和原有的系统中,以及与用Java 编写的组件的连接。   RMI为采用Java对象的分布式计算提供了简单而直接的途径。这些对象可以是新的Java对象,也可以是围绕现有API的简单的Java包装程序。Java体现了“编写一次就能在任何地方运行的模式。而RMI可将Java模式进行扩展,使之可在任何地方运行”。   因为RMI是以Java为核心的,所以,它将Java的安全性和可移植性等强大功能带给了分布式计算。您可将代理和梢务逻辑等属性移动到网络中最合适的地方。如果您要扩展Java在系统中的使用,RMI将使您充分利用其强大功能。   RMI可利用标准Java本机方法接口JNI与现有的和原有的系统相连接。RMI还可利用标准JDBC包与现有的关系数据库连接。RMI/JNI和RMI/JDBC相结合,可帮助您利用RMI与目前使用非Java语言的现有服务器进行通信,而且在您需要时可扩展Java在这些服务器上的使用。RMI可帮助您在扩展使用时充分利用Java的强大功能。 优点   从最基本的角度看,RMI是Java的远程过程调用(RPC)机制。与传统的RPC系统相比,RMI具有若干优点,因为它是Java面向对象方法的一部分。传统的RPC系统采用中性语言,所以是最普通的系统--它们不能提供所有可能的目标平台所具有的功能。   RMI以Java为核心,可与采用本机方法与现有系统相连接。这就是说,RMI可采用自然、直接和功能全面的方式为您提供分布式计算技术,而这种技术可帮助您以不断递增和无缝的方式为整个系统添加Java功能。 RMI的主要优点如下:  面向对象:RMI可将完整的对象作为参数和返回值进行传递,而不仅仅是预定义的数据类型。也就是说,您可以将类似Java哈希表这样的复杂类型作为一个参数进行传递。而在目前的RPC系统中,您只能依靠客户机将此类对象分解成基本数据类型,然后传递这些数据类型,最后在服务器端重新创建哈希表。RMI则不需额外的客户程序代码(将对象分解成基本数据类型),直接跨网传递对象。  可移动属性:RMI可将属性(类实现程序)从客户机移动到服务器,或者从服务器移到客户机。例如,您可以定义一个检查雇员开支报告的接口,以便察看雇员是否遵守了公司目前实行的政策。在开支报告创建后,客户机就会从服务器端获得实现该接口的对象。如果政策发生变化,服务器端就会开始返回使用了新政策的该接口的另一个实现程序。您不必在用户系统上安装任何新的软件就能在客户端检查限制条件--从而向用户提供烁快的反馈,并降低服务器的工作量。这样就能具备最大的灵活性,因为政策改变时只需要您编写一个新的Java类,并将其在服务器主机上安装一次即可。  设计方式:对象传递功能使您可以在分布式计算中充分利用面向对象技术的强大功能,如二层和三层结构系统。如果您能够传递属性,那么您就可以在您的解决方案中使用面向对象的设计方式。所有面向对象的设计方式无不依靠不同的属性来发挥功能,如果不能传递完整的对象--包括实现和类型--就会失去设计方式上所提供的优点。  安  全:RMI使用Java内置的安全机制保证下载执行程序时用户系统的安全。RMI使用专门为保护系统免遭恶意小应用程序侵害而设计的安全管理程序,可保护您的系统和网络免遭潜在的恶意下载程序的破坏。在情况严重时,服务器可拒绝下载任何执行程序。 便于编写和使用:RMI使得Java远程服务程序和访问这些服务程序的Java客户程序的编写工作变得轻松、简单。远程接口实际上就是Java接口。服务程序大约用三行指令宣布本身是服务程序,其它方面则与任何其它Java对象类似。这种简单方法便于快速编写完整的分布式对象系统的服务程序,并快速地制做软件的原型和早期版本,以便于进行测试和评估。因为RMI程序编写简单,所以维护也简单。  可连接现有/原有的系统:RMI可通过Java的本机方法接口JNI与现有系统进行进行交互。利用RMI和JNI,您就能用Java语言编写客户端程序,还能使用现有的服务器端程序。在使用RMI/JNI与现有服务器连接时,您可以有选择地用Java重新编写服务程序的任何部分,并使新的程序充分发挥Java的功能。类似地,RMI可利用JDBC、在不修改使用数据库的现有非Java源代码的前提下与现有关系数据库进行交互。  编写一次,到处运行:RMI是Java“编写一次,到处运行 ”方法的一部分。任何基于RMI的系统均可100%地移植到任何Java虚拟机上,RMI/JDBC系统也不例外。如果使用RMI/JNI与现有系统进行交互工作,则采用JNI编写的代码可与任何Java虚拟机进行编译、运行。  分布式垃圾收集:RMI采用其分布式垃圾收集功能收集不再被网络中任何客户程序所引用的远程服务对象。与Java 虚拟机内部的垃圾收集类似,分布式垃圾收集功能允许用户根据自己的需要定义服务器对象,并且明确这些对象在不再被客户机引用时会被删除。  并行计算:RMI采用多线程处理方法,可使您的服务器利用这些Java线程更好地并行处理客户端的请求。Java分布式计算解决方案:RMI从JDK 1.1开始就是Java平台的核心部分,因此,它存在于任何一台1.1 Java虚拟机中。所有RMI系统均采用相同的公开协议,所以,所有Java 系统均可直接相互对话,而不必事先对协议进行转换。 传递属性   前面我们讲到,RMI可以传递属性,并简单介绍了一下一个有关开支报告程序的情况。下面我们将深入讨论如何设计这样的系统。这样介绍的目的是使您能够利用RMI的功能将属性从一个系统传递到另一个系统,并随心所欲地安排当前的计算地点,并便于将来的改变。下面的例子并未涉及真实世界可能发生的所有问题,但可帮助读者了解处理问题的方法。 服务器定义的策略   图1是可进行动态配置的开支报告系统的示意图。客户机向用户显示图形用户界面(GUI),用户填写开支报告。客户机程序使用RMI与服务器进行通信。服务器使用JDBC( Java关系数据库连接包)将开支报告存储在数据库中。至此,这看起来与其它多层次系统大同小异,但有一个重大区别-- RMI能下载属性。 假定公司关于开支报告的政策发生改变。例如,目前公司只要求对超过20美元的开支需开具发票。但到明天,公司认为这太宽松了,便决定除不超过20美元的餐费以外,任何开支均需开具发票。如果不能下载属性的话,那么在设计便于修改的系统时您可选择下列方法之一:   用客户端安装与政策有关的程序。政策改变时,必须更新包含此政策的所有客户端程序。您可在若干服务器上安装客户程序,并要求所有用户从这些服务器之一运行客户程序,从而减少问题。但这仍不能彻底解决问题-- 那些让程序运行好几天的用户就无法使程序更新,而总是会有一些用户为了方便而把软件复制到本地磁盘上。   您可要求服务器在每次向开支报告添加项目时检查政策。但这样就会在客户机和服务器之间产生大量数据流,并增加服务器的工作量。这还会使系统变得更加脆弱--网络故障会立即妨碍用户,而不仅仅是只在其呈交开支报告或启动新的报告时对其产生影响。同时,添加项目的速度也会变慢,因为这需要穿越整个网络往返一圈才能到达(不堪重负的)服务器。 您可在呈交报告时要求服务器对政策进行检查。这样就会使用户创建很多必须待批报告的错误项目,而不是立刻捕捉到第一个错误,从而使用户有机会停止制造错误。为避免浪费时间,用户需要立刻得到有关错误的反馈。   有了RMI,您就能以简单的方法调用程序从服务器得到属性,从而提供了一种灵活的方式,将计算任务从服务器卸载到客户机上,同时为用户提供速度更快的反馈。当用户准备编写一份新的开支报告时,客户机就会向服务器要求一个对象,该对象嵌入了适用于该开支报告的当前政策,就如同通过用Java编写的政策接口所表示的那样。该对象可以以任何方式实现当前政策。如果这是客户机RMI首次看到这种专门执行的政策,就会要求服务器提供一份执行过程的副本。如果执行过程将来发生变化,则一种新的政策对象将被返回给客户机,而RMI运行时则会要求得到新的执行过程。   这表明,政策永远是动态的。您要想修改政策,就只需简单地编写通用政策接口的新的执行程序,把它安装在服务器上,并对服务器进行配置以返回这种新类型的对象即可。这样,每台客户机都会根据新的政策对新的开支报告进行检查。 这是一种比任何静态方法都更好的方法,原因如下:   所有客户机不必暂停或用新的软件来升级--软件可根据需要在不工作时加以更新。   服务器不必参与项目检查工作,该工作可在本地完成。   允许动态限制,因为对象执行程序(而不仅仅是数据)是在客户机和服务器之间进行传递的。   使用户能立刻看到错误。 使客户机在服务器上所能调用的方法的远程接口定义如下: import java.rmi.*; public interface ExpenseServer extends Remote { Policy getPolicy() throws RemoteException; void submitReport(ExpenseReport report) throws RemoteException, InvalidReportException; } import语句输入Java RMI包。所有RMI类型均在包java.rmi或其子包内定义。接口ExpenseServer是一般的Java接口,具有如下两种有趣的特点: 它扩展了名为Remote的RMI接口,这使该接口标记为可用于远程调用。 它的所有方法均抛出RemoteException,后者用来表示网络或信息故障。   远程方法还可抛出您所需要的任何其他例外,但至少必须抛出RemoteException,这样您才能处理只会在分布式系统中发生的错误状态。该接口本身支持两个方法:getPolicy (返回一个实现政策接口的对象),和submitReport (提交一个完成的开支请求,并在报告无论因何种原因使表格出现错误时,抛出一个例外)。 政策接口本身可声明一种使客户机知道能否在开支报告中添加一个项目的方法: public interface Policy { void checkValid (Expenseentry entry) throws PolicyViolationException; } 如果该项目有效--即符合当前政策,则该方法可正常返回。否则就会抛出一个描述该错误的例外。政策接口是本地的(而非远程的),所以将通过本机对象在客户机上执行--在客户机的虚拟机上,而非整个网络上运行的对象。客户机可能运行下列程序: Policy curPolicy = server.getPolicy(); start a new expense report show the GUI to the user while (user keeps adding entries) { try { curPolicy.checkValid(entry); // throws exception if not OK add the entry to the expense report } catch (PolicyViolationException e) { show the error to the user } } server.submitReport(report);   当用户请求客户机软件启动一份新的开支报告时,客户机就调用server.getPolicy,并要求服务器返回一个包含当前开支政策的对象。添加的每个项目首先都被提交给该政策对象,以获得批准。如果政策对象报告无错误,则该项目就被添加到报告中;否则错误就被显示给用户,而后者可采取修正措施。当用户完成向报告中添加项目时,整个报告就被呈交。服务程序如下: import java.rmi. *; import java.rmi.server. *; class ExpenseServerImpl extends UnicastRemoteObject implements ExpenseServer { ExpenseServerImpl() throws RemoteException { // . . . set up server state . . . } public Policy getPolicy() { return new TodaysPolicy(); } public void submitReport(ExpenseReport report) { // . . . write the report into the db . . . } } 除基本程序包外,我们还输入RMI的服务程序包。类型UnicastRemoteObject 定义了此服务程序远程对象的类型,在本例中,应为单一服务程序而非复制服务(下面还会详细介绍)。Java类ExpenseSeverImpl实现远程接ExpenseServer的方法。远程主机的客户机可使用RMI将信息发送给ExpenseServerImpl对象。 本文中讨论的重要方法是getPolicy,它简单地返回定义当前政策的对象。下面看一个执行政策的例子: public class TodaysPolicy implements Policy { public void checkValid(ExpenseEntry entry) throws PolicyViolationException { if (entry.dollars() < 20) { return; // no receipt required else if (entry.haveReceipt() == false) { throw new PolicyViolationException; } } } TodaysPolicy进行检查的目的是确保无收据的任何项目均少于20美元。如果将来政策发生变化,仅少于20美元的餐费可不受“需要收据”政策的限制,则您可提供新的政策实现: public class TomorrowsPolicy implements Policy { public void checkValid(ExpenseEntry entry) throws PolicyViolationException { if (entry.isMeal() && entry.dollars() < 20) { return; // no receipt required } else if (entry.haveReceipt() == false) { throw new PolicyViolationException; } } }   编写这个类,并把它安装在服务器上,然后告诉服务器开始提供TomorrowsPolicy对象,而非daysPolicy对象,这样您的整个系统就会开始使用新的政策。当客户机调用服务器的getPolicy方法时,客户机的RMI就会检查返回的对象是否为已知类型。每台客户机首次遇到TomorrowsPolicy时,RMI就会在getPolicy返回前下载政策的实现。客户机可轻松地开始增强这个新的政策。   RMI使用标准Java对象序列化机制传递对象。引用远程对象参数作为远程引用传递。如果向某方法提供的参数为原始类型或本机(非远程)对象,则向服务器传递一个深副本。返回值也拾照同样的方式处理,只不过是沿其它方向。RMI可使用户向本机对象传递和返回完整对象图并为远程对象传递和返回引用。   在真实的系统中,getPolicy方法可能会有一个可以识别用户及开支报告类型(差旅、客户关系等)的参数,这样可使政策加以区别。您或者可以不要求单独的政策和开支报告对象,但您可以有一种newExpenseReport方法,它可返回一个直接检查政策的ExpenseReport对象。这最后一种策略可使您像修改政策一样简单地修改开支报告的内容--当公司决定需要把餐费划分为早餐、午餐和晚餐项目,而且像上述修改政策一样简单地执行修改时--可编写一个实现该报告的新类,客户程序就会自动使用这个类。 计算服务器   开支报告的例子表示了客户机如何从服务器得到属性。属性可沿两个方向传递--客户机也可将新的类型传递给用户。最简单的例子就是如图2所示的计算服务器,该服务程序可执行任意任务,这样整个企业内的客户机都能利用高端或专用计算机。 任务由一个简单的本地(非远程)接口定义: public interface Task { Object run(); } 运行时,它就会进行一些计算,并返回一个包含结果的对象。这完全是一般性的任务--几乎所有计算任务都可在这个接口下实现。远程接口ComputeServer也同样简单: import java.rmi.*; public interface ComputeServer extends Remote { Object compute(Task task) throws RemoteException; } 这个远程接口的唯一目的就是使客户机创建一个Task (任务)对象,并把它发送给服务器执行,最后返回结果。该服务器的基本实现如下: import java.rmi.*; import java.rmi.server.*; public class ComputeServerImpl extends UnicastRemoteObject implements ComputeServer { public ComputeServerImpl() throws RemoteException { } public Object compute(Task task) { return task.run(); } public static void main(String[] args) throws Exception { // use the default, restrictive security manager System.setSecurityManager(new RMISecurityManager()); ComputeServerImpl server = new ComputeServerImpl(); Naming.rebind("ComputeServer", server); System.out.println("Ready to receive tasks"); return; } }   如果您看一看compute方法就会发现,它非常简单。它只是接受传递给它的对象,并返回计算的结果。main方法包括服务器的启动代码--它安装了RMI的缺省安全管理程序,以防止他人存取本地系统,并创建可处理进入的请求的ComputeServerImpl对象,并将其与名字"ComputeServer"关联。这时,服务器已经准备好接收要执行的任务,而main 也完成了其设置。 如上所述,这实际上是一种全面和实用的服务。系统可以得到改进,比如,可添加要计算的参数,从而对使用服务程序的部门进行计费。但在很多情况下,上述接口和及其实现允许使用高端计算机进行远程计算。这又明了RMI的简单性--如果您键入上述类,对其进行编译,并启动服务程序,您就拥有了能执行任意任务的运行计算服务器。   下面介绍一个使用这种计算服务的例子。假定您购买了一个能运行大量计算操作应用程序的非常高端的系统。管理员可在该系统上启动一个Java虚拟机,运行ComputeServerImpl对象。该对象现在就可接受要运行的任务。 现在假定一个小组准备通过一组数据培训一个神经网络,以帮助制订采购策略。他们可以采用的步骤如下:   定义一个类--暂且称之为PurchaseNet。它能接受一组数据,并运行培训数据,返回一个经过培训的神经网络。PurchaseNet 将实现Task (任务)接口,并在其run方法中执行其工作。他们可能还需要一个Neuron类来描述所返回的网络中的节点,而且很可能需要其它类来描述处理过程。run方法将返回一个由一组经过培训的Neuron对象组成的NeuralNet对象。 当这些类被编写好并进行小规模测试时,用一个PurchaseNet 对象调用ComputeServer的compute方法。 当ComputeServerImpl对象中的RMI系统接收到作为进入参数的 PurchaseNet对象时,它就下载PurchaseNet的实现,并调用该服务器的compute方法,并把该对象作为Task (任务)参数。 Task,也就是PurchaseNet对象,将开始执行其执行程序。当执行程序需要诸如Neuron和NeuralNet等新的类时,它们可根据需要下载。 所有计算都将在计算服务器上执行,而客户机线程则等待结果。(客户机系统上的另一个线程则会显示“正在等待”光标或使用Java的内置并行机制执行另一个任务 )。当运行返回其NeuralNet对象时,这个对象将作为compute 方法的结果被传递回客户机。 这不需要在服务器上安装其它软件--所有必须完成的任务都由各部门在其自己的计算机上完成,随后再根据需要传递给计算服务器主机。 这个简单的计算服务器体系结构为系统的分布式功能提供了功能强大的转换能力。一项任务的计算可以被转移到一个能为其提供最好支持的系统上完成。这样的系统可以被用来:   在ComputeServerImpl对象运行于有数据挖掘需要的主机上,支持数据挖掘应用程序。这样可使您轻松地把任何计算移动到数据所在的地方。 在从当前股票价格、发货信息或其它实时信息等外部资源获得直接数据的服务器上运行计算任务。 通过运行ComputeServer (接受进入的请求并将其转送到运行 ComputeServerImpl的负担最小的服务器上)的不同实现,而将任务分布在多个服务器上。 代理 因为RMI允许使用Java实现下载属性,所以您可使用RMI 编写代理系统。代理的最简单格式如下: import java.rmi.*; public interface AgentServer extends Remote { void accept(Agent agent) throws RemoteException, InvalidAgentException; } public interface Agent extends java.io.Serializable { void run(); } 启动一个代理也就创建了实现Agent (代理)接口、找到服务器、激活接受该代理对象的类。该代理的执行程序将被下载到服务器上运行。accept方法将启动一个该代理的新线程,激活其run方法,然后返回,从而使该代理一直执行到run方法返回为止。代理可通过激活在另一台主机上运行的服务程序的accept方法而移植到该主机,而其本身则作为将被接受的代理来传递,并结束其在原来主机上的线程。 面向对象的代码重用与设计模式   面向对象的编程是一项允许代码重用的强大技术。很多企业组织都使用面向对象的编程来减轻创建程序的负担和提高系统的灵活性。RMI是完全面向对象的--信息被发送给远程对象,而且对象可以被传递和返回。 Design Patterns (设计模式)目前在描述面向对象设计的实践活动中获得了相当大的成功。首先是因为Design Patterns 的创新工作而使之大受欢迎,这些编程方式是一种正式描述解决某类特定问题的完整方法的途径。所有这些设计模式都依赖于创建一个或多个抽象概念,这些抽象概念允许不同的实现,从而允许和增强软件重用。软件重用是面向对象技术的主要优势,而设计模式则是促进重用的最受欢迎的技术之一。 所有设计模式都依赖面向对象的多态性--这是对象( 如Task )拥有多个实现的能力。算法的普通部分(如compute 方法)不必知道使用了哪个实现,它只需知道得到一个对象后应该对该对象采取什么操作。特别地,计算服务器就是Command (指令)模式的一个例子,它可使您将请求 (任务)表示为对象,并对其进行调度。 只有当包括执行程序在内的完整对象能在客户机和服务器之间传递时,才会存在这样的多态性。DCE和DCOM等传统的RPC系统以及CORBA等基于对象的RPC系统不能下载并执行程序,因为它们不能把真实对象作为参数传递,而只能传递数据。   RMI可传递包括执行程序在内的所有类型,所以您可以在分布式计算解决方案中,而不仅仅是本地计算中使用面向对象的编程--包括设计方式。如果没有RMI这样完全面向对象的系统,那么您就必须放弃很多分布式计算系统中的设计方式--以及面向对象的软件重用的其它形式。
对于Java RMI 远程方法调用的理解 前言 RMI 是前进路上不得不学的一个重点知识。 最近有点迷茫,希望有大哥能指条路。 什么是RMI 远程方法调用 RMI(Remote Method Invocation),是允许运行在一个Java虚拟机的对象调用运行在另一个Java虚拟机上的对象的方法。 这两个虚拟机可以是运行在相同计算机上的不同进程中,也可以是运行在网络上的不同计算机中。 Java RMI:Java远程方法调用,即Java RMI(Java Remote Method Invocation)是Java编程语言里,一种用于实现远程过 阅读详情

相关推荐

三种方式实现java远程调用(rmi),绝对可用

三种方式实现java远程调用(rmi) 方式一:原始方式 方式二:spring 方式三:jndi 解压,放到myeclipse上可用

java远程调用之RMI(终于可以自己写代码控制别人电脑了)

之前在研究生课程当中学了分布式系统这门课,而且还是自己的导师讲的这门课,在课堂上迷迷糊糊的晃悠了一学期,除了听见几个名词,也没太多印象。正好这几天用到远程过程调用,使用的是gRPC,想到之前上课听过,于是把这块的知识从书到教程好好地补充了一下。 本篇文章尽量不啰嗦,它的重要性自己可以私下了解一下。 一、什么是RMI 1、概念 RMI又叫做远程方法调用。在java中表示一台java虚拟机上的程序调用...

冯冬冬的博客 1834

java远程调用方法总结

NULL 博文链接:https://super-wangj.iteye.com/blog/2377716

Java RPC调用: 远程过程调用的实现与应用

RPC调用是一种实现分布式计算和跨网络通信的重要机制。在Java中,可以使用Apache Thrift、gRPC等框架来实现RPC调用。通过定义接口和实现类,然后将实现类注册到RPC框架中,可以实现跨网络的函数调用。RPC调用在微服务架构、分布式系统和跨平台通信等场景中得到广泛应用。在使用RPC调用时,需要注意处理异常情况和网络故障,以及保证数据的安全性和一致性。通过练习题的答题和思考,可以更深入地理解和应用RPC调用的原理和技术。

hitpter的专栏 3151

apt-fast,调用aria2下载

网上找到的apt-fast都是调用axel下载,但是,我这个改动了一下,调用aria2下载,请确保你已经安装了aria2.下载后,添加可执行权限,然后复制到/usr/bin下,就可以用apt-fast命令代替apt-get命令了。下载速度成倍提高

java实现远程服务调用

主要使用HttpClient进行多系统数据交互的demo,使用文档和jar

Java中的远程方法调用——RPC详解

Java中的远程方法调用(Remote Procedure Call,RPC)是一种允许一个程序调用另一台计算机上方法的技术,就像在本地一样。通过RPC,开发者不必关心网络传输、数据格式转换等细节,只需要按照调用本地方法的方式来调用远程方法。是一个轻量级的二进制协议,支持跨语言调用,适用于Java与其他语言间的通信。RMI是Java内置的RPC实现,它允许Java应用程序之间调用远程对象,类似于本地调用。使用RPC,客户端就可以像调用自己机器上的方法一样,远程调用服务器上提供的“获取用户信息”的方法。

m0_53926113的博客 4147

java-rpc远程过程调用

纯java写的rpc远程过程调用列子,不依赖除jdk以外的任何第三方jar,简单,方便理解,代码几百行代码,小白都能看的懂,往架构方向发展的同学可以学习一下

Java中的远程调用技术:揭秘分布式系统中的黑科技

远程调用(Remote Procedure Call,RPC)技术允许程序在不同的地址空间中执行代码。简单来说,就是你的程序可以调用另一台服务器上的方法,就像调用本地方法一样。这样,我们就可以将不同的功能模块部署在不同的服务器上,实现系统的高可用和高扩展。

weixin_46372265的博客 1144

AutoDL上传数据详细步骤(自己用的步骤,可能没有其他大佬用的那么高级)

AutoDL上传数据详细步骤(自己用的步骤,可能没有其他大佬用的那么高级)

孟孟单单的博客 7万+

机器人路径规划:基于冠豪猪优化算法(Crested Porcupine Optimizer,CPO)的机器人路径规划(提供MATLAB代码)

移动机器人(Mobile robot,MR)的路径规划是 移动机器人研究的重要分支之,是对其进行控制的基础。根据环境信息的已知程度不同,路径规划分为基于环境信息已知的全局路径规划和基于环境信息未知或局部已知的局部路径规划。随着科技的快速发展以及机器人的大量应用,人们对机器人的要求也越来越高,尤其表现在对机器人的智能化方面的要求,而机器人自主路径规划是实现机器人智能化的重要步骤,路径规划是指规划机器人从起点位置出发,无碰撞、安全到达指定目标位置的最优路径。

IT猿手 1368

Java RMI远程方法调用详解

远程方法调用RMI(Remote Method Invocation),是允许运行在一个Java虚拟机的对象调用运行在另一个Java虚拟机上的对象的方法。 这两个虚拟机可以是运行在相同计算机上的不同进程中,也可以是运行在网络上的不同计算机中。 Java RMI:Java远程方法调用,即Java RMI(Java Remote Method Invocation)是Java编程语言里,一种用于实现远程过程调用的应用程序编程接口。它使客户机上运行的程序可以调用远程服务器上的对象。远程方法调用特性使

AI吃大瓜的博客 3万+

解决西门子Step 7 basic 找不到许可证问题

你在使用博图软件是否遇到过Step 7 basic 找不到许可证的问题呢!不言怕,今天我就来告诉你该如何处理吧!看步骤: 1.删除原授权的License: 打开Automation License Manager应用,然后我们可以发现仅有的License Key前面有一个时钟,说明它已经过期不可用,我们就要去寻求新的Key. 打开“我的电脑”,选择C盘,点击上方查看 点击选项–>查看 然...

让技术没有门槛 14万+

如何在Java中实现远程方法调用

                           如何在Java中实现远程方法调用经乾、郭镇、赵伟   一、Java中的远程方法调用   远程方法调用(Remote Method Invocation, RMI)是Java1.1引入的分布式对象软件包,它的出现简化了在多台机器上的Java应用之间的通信。相比CORBA,RMI功能较弱且只能用于Java系统。   二、实现一个简单的RMI

iBreathe的专栏 1952

Labview_DQMH框架学习1--浅析

本文主要结合一个相对容易理解的例子,阐述 DQMH 框架的工作原理,希望对初学者有一定的帮助。

hrbeuxn的博客 3053

xsens IMU配置

1.安装驱动 sudo apt-get update sudo apt-get install ros-kinetic-xsens-driver 2.配置IMU 设置输出四元数,加速度、角速度、地磁 cd /opt/ros/kinetic/lib/xsens_driver python mtdevice.py --configure "oq,aa,wr,mf" 3.启动IMU roslaunch xsens_driver xsens_driver.launch 转(https://www.cnblo

qq_41585680的博客 2326

Java—RMI:远程方法调用,基于TCP协议

Java—RMI:远程方法调用,基于TCP协议 RMI简介: ​ 远程方法调用,是JDK1.2推出的功能,它可以 实现Java应用中可以像调用本地方法一样调用另一个服务器中Java应用(JVM)中的内容。 ​ RMI是Java语言的远程调用,无法实现跨语言。 执行流程: ​ Registry(注册表,注册中心,远程过程的定位,而不是调用。协议式的远程访问,rmi协议请求方式不在是post或get了,而是接口别名,可以随意起名。但是要保证这个接口是唯一的。同一个IP、同一个端口唯一。)是放置所有服务器

jiu_dian的博客 1730

【人工智能】Warp 终端完整汉化方案(2026最新)

截至2026年5月,,仅完成了中文、日文、韩文等东亚语言的字符渲染支持,设置面板中无官方语言切换选项,相关中文UI功能需求仍在官方GitHub开源仓库的需求迭代队列中。

奶爸的编程之路,也就一周冷个三天 3119

java 远程方法调用示例

RMI在java中是一个古老的程序协作方式,允许一个JVM中运行的程序去调用另外一个JVM中运行的程序,通常是跨机器的方法调用。实现这种技术需要使用到代理,确切的说是 远程代理,在旧版的java中,在远程服务方需要生成skeleton对象,在调用方需要生成stub对象,调用的过程是调用方请求stub对象,stub对象与远程的skeleton通信,skeleton对 象请求服务,将结果通过网络传

musa875643dn的专栏 1263

《AgentScope-Java 深入浅出教程》第8章 工具高级特性

掌握工具组、预设参数、执行上下文等高级特性。

步子哥的博客 267

ZYNQ PL通过EMIO ETHE1外接PHY由GMII转RGMII

1,设置EMIO方式引出ETHE1 2,从GMII过度到RGMII GMII: 发送 gmii_tx_clk gmii_tx_d[7:0] gmii_tx_en gmii_tx_er 接收 gmii_rx_clk gmii_rx_d[7:0] gmii_rx_dv gmii_rx_er RGMII: 发送 tx_clk tx_d[3:0] tx_ctrl 接收 rx_clk rx_d[3:0] rx_ctrl 首先数据总线从时钟单边沿采样8bit转变为了双边沿采样4bit,从88E1

wangjie36的博客 1万+

JAVA基础:在Java中实现远程方法调用

一、Java中的远程方法调用   远程方法调用(Remote Method Invocation, RMI)是Java1.1引入的分布式对象软件包,它的出现简化了在多台机器上的Java应用之间的通信。相比CORBA,RMI功能较弱且只能用于Java系统。   二、实现一个简单的RMI   要使用RMI,必须构造四个主要的类:远程对象的本地接口、RMI客户、远程对象实现和RMI服务器。RMI服

她爱小灰灰 824

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Java远程方法调用(RMI)

这学期上了《分布式系统》课程,内容主要是基于Java实现分布式计算,所以老师前几节课主要在给我们讲用Java做分布式可能会用到的一些技术。为了方便学习和记录,我将老师讲的内容结合资料做了一些整理,这一篇主要讨论Java远程方法调用(RMI)。 下面的内容主要翻译自Java官方文档。我使用的是Google翻译,翻完了以后如果有不太对的地方就手动调整了一下,难免有一些地方翻译得不是很清楚,欢迎指出,或直接查看官方文档原文。

Curren的博客 2760

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

java的远程方法调用

1,前言         前段时间我从昆明搬家到成都,突然想起还有一个文件落在了昆明,这个文件很重要,该怎么办呢。当然我会不假思索的赶快联系在昆明的朋友,让这个朋友帮我拿到文件,再帮我邮寄过来。本来很棘手而又很重要的一件事,似乎很容易且方便的就解决了。         当我学习java远程方法调用时,突然明白java的这项技术原来借鉴了日常生活中的经常用到而又很简便的方法。我不妨看作是运行在本

远方的专栏 1416
上一篇: Java抽取Office、PDF的四件兵器
下一篇: 关于redsaga放出的subversion文档的声明
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值