「java远」java远程调用接口几种方式

博主:adminadmin 2022-11-23 21:42:07 64

本篇文章给大家谈谈java远,以及java远程调用接口几种方式对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

JAVA 远程 调用的几种实现方式简析 详细�0�3

基本原理 要实现网络机器间的通讯,首先得来看看计算机系统网络通信的基本原理,在底层层面去看,网络通信需要做的就是将流从一台计算机传输到另外一台计算机,基于传输协议和网络 IO 来实现,其中传输协议比较出名的有 http、tcp、 udp 等等,http、tcp、udp 都是在基于Socket 概念上为某类应用场景而扩展出的传输协议,网络IO,主要有bio、nio、aio 三种方式,所有的分布式应用通讯都基于这个原理而实现,只是为了应用的易用,各种语言通常都会提供一些更为贴近应用易用的应用层协议。 应用级协议 远程服务通讯,需要达到的目标是在一台计算机发起请求,另外一台机器在接收到请求后进行相应的处理并将结果返回给请求端,这其中又会有诸如 onewayrequest、同步请求、异步请求等等请求方式,按照网络通信原理,需要实现这个需要做的就是将请求转换成流,通过传输协议传输至远端,远端计算机在接收到请求的流后进行处理,处理完毕后将结果转化为流,并通过传输协议返回给调用端。原理是这样的,但为了应用的方便,业界推出了很多基于此原理之上的应用级的协议,使得大家可以不用去直接操作这么底层的东西,通常应用级的远程通信协议会提供: 1.为了避免直接做流操作这么麻烦,提供一种更加易用或贴合语言的标准传输格式;2.网络通信机制的实现,就是替你完成了将传输格式转化为流,通过某种传输协议传输至远端计算机,远端计算机在接收到流后转化为传输格式,并进行存储或以某种方式通知远端计算机。 所以在学习应用级的远程通信协议时,我们可以带着这几个问题进行学习: 1.传输的标准格式是什么?2.怎么样将请求转化为传输的流?3.怎么接收和处理流?4.传输协议是? 不过应用级的远程通信协议并不会在传输协议上做什么多大的改进,主要是在流操作方面,让应用层生成流和处理流的这个过程更加的贴合所使用的语言或标准,至于传输协议则通常都是可选的,在java 领域中知名的有:RMI、 XML-RPC、Binary-RPC、SOAP、CORBA、JMS,来具体的看看这些远程通信的应用级协议: RMIRMI 是个典型的为java 定制的远程通信协议,我们都知道,在 singlevm 中,我们可以通过直接调用javaobjectinstance 来实现通信,那么在远程通信时,如果也能按照这种方式当然是最好了,这种远程通信的机制成为RPC(RemoteProcedureCall),RMI 正是朝着这个目标而诞生的。 来看下基于RMI 的一次完整的远程通信过程的原理: 1.客户端发起请求,请求转交至RMI 客户端的stub 类;2.stub 类将请求的接口、方法、参数等信息进行序列化;3.基于socket 将序列化后的流传输至服务器端;4.服务器端接收到流后转发至相应的skelton 类;5.skelton 类将请求的信息反序列化后调用实际的处理类;6.处理类处理完毕后将结果返回给 skelton 类;7.Skelton 类将结果序列化,通过socket 将流传送给客户端的 stub;8.stub 在接收到流后反序列化,将反序列化后的JavaObject 返回给调用者。 根据原理来回答下之前学习应用级协议带着的几个问题: 1.传输的标准格式是什么?是JavaObjectStream。2.怎么样将请求转化为传输的流?基于Java 串行化机制将请求的javaobject 信息转化为流。3.怎么接收和处理流?根据采用的协议启动相应的监听端口,当有流进入后基于Java 串行化机制将流进行反序列化,并根据RMI 协议获取到相应的处理对象信息,进行调用并处理,处理完毕后的结果同样基于java 串行化机制进行返回。4.传输协议是?Socket。 XML-RPCXML-RPC 也是一种和RMI 类似的远程调用的协议,它和RMI 的不同之处在于它以标准的 xml 格式来定义请求的信息(请求的对象、方法、参数等),这样的好处是什么呢,就是在跨语言通讯的时候也可以使用。 来看下XML-RPC 协议的一次远程通信过程: 1.客户端发起请求,按照XML-RPC 协议将请求信息进行填充;2.填充完毕后将xml 转化为流,通过传输协议进行传输;3.接收到在接收到流后转换为xml,按照XML-RPC 协议获取请求的信息并进行处理;4.处理完毕后将结果按照XML- RPC 协议写入xml 中并返回。 同样来回答问题: 1.传输的标准格式是?标准格式的XML。2.怎么样将请求转化为传输的流? 将XML 转化为流。3.怎么接收和处理流?通过监听的端口获取到请求的流,转化为XML,并根据协议获取请求的信息,进行处理并将结果写入XML 中返回。4. 传输协议是?Http。 Binary-RPCBinary-RPC 看名字就知道和XML-RPC 是差不多的了,不同之处仅在于传输的标准格式由XML 转为了二进制的格式。 同样来回答问题: 1.传输的标准格式是?标准格式的二进制文件。2.怎么样将请求转化为传输的流?将二进制格式文件转化为流。3.怎么接收和处理流?通过监听的端口获取到请求的流,转化为二进制文件,根据协议获取请求的信息,进行处理并将结果写入XML 中返回。4.传输协议是?Http。 SOAPSOAP 原意为SimpleObjectAccessProtocol,是一个用于分布式环境的、轻量级的、基于XML 进行信息交换的通信协议,可以认为SOAP 是XMLRPC 的高级版,两者的原理完全相同,都是http+XML,不同的仅在于两者定义的XML 规范不同,SOAP 也是Webservice 采用的服务调用协议标准,因此在此就不多加阐述了。 CORBACommonObjectRequestBrokerArchitecture(公用对象请求代理[调度]程序体系结构),是一组用来定义"分布式对象系统"的标准,由 OMG(ObjectMenagementGroup)作为发起和标准制定单位。CORBA 的目的是定义一套协议,符合这个协议的对象可以互相交互,不论它们是用什么样的语言写的,不论它们运行于什么样的机器和操作系统。CORBA 在我看来是个类似于SOA 的体系架构,涵盖可选的远程通信协议,但其本身不能列入通信协议这里来讲,而且CORBA 基本淘汰,再加上对CORBA 也不怎么懂,在此就不进行阐述了。 JMSJMS 呢,是实现java 领域远程通信的一种手段和方法,基于JMS 实现远程通信时和RPC 是不同的,虽然可以做到RPC 的效果,但因为不是从协议级别定义的,因此我们不认为JMS 是个RPC 协议,但它确实是个远程通信协议,在其他的语言体系中也存在着类似JMS 的东西,可以统一的将这类机制称为消息机制,而消息机制呢,通常是高并发、分布式领域推荐的一种通信机制,这里的主要一个问题是容错(详细见ErLang 论文)。 来看JMS 中的一次远程通信的过程: 1.客户端将请求转化为符合JMS 规定的Message;2.通过JMSAPI 将Message 放入JMSQueue 或Topic 中;3.如为JMSQueue,则发送中相应的目标Queue 中,如为Topic,则发送给订阅了此Topic 的JMSQueue。4.处理端则通过轮训 JMSQueue,来获取消息,接收到消息后根据JMS 协议来解析Message 并处理。 回答问题: 1.传输的标准格式是?JMS 规定的Message。2.怎么样将请求转化为传输的流?将参数信息放入Message 中即可。3.怎么接收和处理流?轮训JMSQueue 来接收Message,接收到后进行处理,处理完毕后仍然是以Message 的方式放入 Queue 中发送或Multicast。4.传输协议是?不限。 基于JMS 也是常用的实现远程异步调用的方法之一。

java 远程调用,具体实现

1、使用java代码通过ssh登陆linux并执行命令,正常情况下sshd服务都会有,知道用户密码就可以使用这种方式了。

2、要在远程linux服务器上执行命令,可以在linux服务器上启动一个服务做执行脚本的代理,不断接受来自你这个项目发来的脚本信息,然后执行,再把结果返回给你项目中去。

第一种:以消息队列的方式发送这些脚本信息,linux代理不断接受,并返回结果。项目同时要不断接受结果。

第二种:项目中产生的脚本,直接记录到数据库,linux上的代理访问这个数据库,获取脚本信息,并将执行结果写入数据库。项目中轮询执行结果。

上面我说的消息队列可以采用activemq,或者rabbitmq这些。

命令执行,java中直接Runtime.getRuntime().exec(command);就行了。

Java是什么

JAVA是什么

简言之,Java环境可用来开发能在任何计算平台上运行的应用软件。它实际上是一种非常基本且结构紧凑的技术,而它对WorldWide Web以及商业的总体影响已可同电子表格对PC机的影响相比拟。

Java是巨大的推动力量

Java已用动态的交互应用软件使Web栩栩如生。它使开发人员具有‘编写一次到处运行TM”的巨大能力。而且,借助其JavaAPI及其编程语言上的Java虚拟机,它已产生一种分布信息的崭新模式。这种模式叫做Java企业计算,正在帮助各企业以各种不同的方法取得竞争优势。网管和控制已大大简化。软件分配基本上是免费的,而且立即可实现。电子贸易已获得。占有成本大幅度降低。信息和应用软件到处可存取。

Java建立在简单的前提基础上,即所有微处理器都应讲同一种语言??所有内部采用芯片的产品都应能一起工作,无缝而方便地共享信息。它已经改变企业和个人同Internet大交道的方式。现在,它正在对消费类产品产生明显的影响,而且从总体上更加深刻地影响企业计算。

借助Java,您可自由自在地使用您已拥有的硬件和软件。这是因为Java是独立于平台的。它还可使您超越企业计算,使应用软件在便携式计算机、信息亭、电视、蜂窝电话和其他大量设备上运行。

全世界的公司都已发现Java数不胜数的用途。所有用途可从其无可比拟的能力,即提高可靠性、安全性和简化各种不同计算产品和环境的能力中受益非浅,而且节省的时间和费用十分可观。

Java无处不在。它已拥有几百万个用户,其发展速度要快于在它以前的其他任何一种计算机产品。它可位于任何地方,而且能到处运行。Java正在迅速被用做传播信息的事实上标准,这是因为它既可给企业,也可给最终用户带来似乎数不清的好处。

因此,请您仔细考察一下Java。它的优闶呛苋菀追⑾值摹?

“Java正在进入企业、家庭和学校。 它正在象Internet本身一样成为普遍存在的技术。” ---Oracle 公司董事长和首席执行官 Larru Ellison

“Java正在改变我们使用Internet的方法,改变我们在公司内部存取信息的方法,甚至改变我们使用蜂窝电话的方法。它正在从根本上改变制作信息、销售信息 和分配信息的方法。” ---EarthWeb公司董事长和首席执行官 Jack Hidary

Java的来龙去脉

Sun公司一小组工程师聚集在一起,认真思考日常生活中的数字系统??因为烤面包机、恒温器、游戏机和其他无数设备 都包含越来越复杂的CPU??以及他们如何能使这些数字系统共享信息。

创造未来的计算

制造产品的人当然全都从不同的方面来考虑其设计,视他们所使用的硬件平台、操作系统和应用软件而定。但是,如果您要 使这些产品中的一些产品一起工作,那怎么办?安全性、可靠性和网络问题又这么样呢?

因此,Sun公司这些工程师把各种不同的产品折开来,然后又把它们重新组装起来,其目标是要使这些不同的设备相互交谈。 他们把这些研究对象相互传来传去,并理解所有其他研究对象的特性,以便使他们能更好地一起工作。这就把制造商的问题缩减 到最低程度,并使消费者能方便地进行集成。当传统的语言证明是不适用时,工程师们就打算找到某种简单的现代新语言。

于是,Java应运而生。人们很快发现,Java有可能超越工程师的想象。Java的魅力在 于它提供给开发人员和用户的简便性。开发人员拥有广大的用户基 础、平台独立性、降低的开发费用和始终如一的执行环境,而用户 则可从生动的内容、即时软件和增大的安全性中受益。但是,Java正是从置于World Wide Web那时起才真正起飞。

Java 使全世界大为震动,因为它使Web页面栩栩如生,而且不久变得很明 显,Java拥有大得多的潜力。人们之所以采纳Java,是因为它有独特 的能力来编制和部署能在任何一个网络、任何一个操作系统上运行的 应用软件。分配软件的时间和费用实际上已不复存在,使得各公司可 把更多的资源用来开发其产品。而且,某些工业专家认为,Java可能会改变软件销售模式,从固定价格改变为按使用量收费,这样做更有 利可图,而且可阻止非法盗版。

Java是一种网络计算的通用开放标准平台。这种平台可从电话一 直扩展到极端重要的应用,建立在您现有的硬件和软件体系结构基础 上,从而创造出一个全部联网的企业或者制造出超出的创新产品。

“由于Java具有可缩放性,因而我们可以把Java应用于小应用软件或大应用软件,把它芯片组以及大型计算机和服务器,并 使它为各种不同的应用领域服务。” ---三菱公司系统营销副总裁 Steve Hester

“借助Java,您可以用一种能最有效地使用的方式动态地分 发和分配交互式商务应用软件一一在需要运行应用软件的地方, 在需要运行应用软件的时候。” ---Novell公司开发者服务部副总和总经理 Gary Mueller

Java扎下根来

在某种意义上,Java具体体现了Sun Microsystiems公司自其14年 前创建以来所追述的目标。当时,它创造了“网络就是计算机”这局名 言。它市基于Web的新网络计算模式的完美平台,因为它建立在各个 组织现有的硬件和软件体系结构基础上,能建立一个全部联网的企业。

Java是一个完整而全面的解决方案

Java远不止是一种编程语言,它是企业内外的完整计算环境,而 且万事齐备,从开发工具、操作系统、服务器软件和瘦/肥客户机一 直到网络管理工具、支持、培训、咨询和集成服务,一应俱全。Java 使用起来非常简单,部分原因是Sun提供一种全面统一的解决方案。

主要组成部分包括:

*Java开发工具和服务:有助于简化开发Java应用软件的产品和服务

*JavaOS:一种结构紧凑的操作系统,可使Java应用软件在网络计算机和蜂窝电话等设备上运行

*Java虚拟机:一层软件,嵌入Windows、Macintosh和UNIX等计算机操作系统,或在这些操作系统上运行,从而使计算机能运行Java应用软件

*Java API:标准软件界面,位于Java应用软件和数据库检索和安全性等服务软件之间

*Java芯片:一系列为Java优化的为处理器

*Solstice WorkShop:Java启动的网络管理工具

*Java培训:一个由教师指导和基于多媒体的完整课程,教会编程员如何开发Java应用软件,包括一个用来验证熟练程度的认证计划

*JavaWorkShop支持:900号电话服务,可为Java WorkShop用户(仅限美国用户)立即提供按需支持这些产品依靠由Sun的核心技术和服务提供的基础,包括:

*Solaris操作系统

*Sikstuce企业管理系统

*WorkShop开发者工具

*SunSpectrum支持服务

*Internet咨询和集成服务

*Java和Internet教育服务

*ultra工作站和Ultra Enterprise服务器;Netra服务器

难怪大公司和日益增多的全球2000公司正在把Java计算用做系统以及其终产品的主要方面。

“您不会把您自己锁住在任何一家公司的专有技术中。开放意味着选择。而Java使您有选择余地。

java远程调用接口的原理和范例,谢谢

Java 远程处理

Java远程方法调用(RMI)提供了Java程序语言的远程通讯功能,这种特性使客户机上运行的程序可以调用远程服务器上的对象,使Java编程人员能够在网络环境中分布操作。

创建一个简单的Java分布式远程方法调用程序可以按以下几个步骤操作,

一、定义远程接口:

在 Java 中,远程对象是实现远程接口的类的实例, 远程接口声明每个要远程调用的方法。在需要创建一个远程对象的时候,我们通过传递一个接口来隐藏基层的实施细节,客户通过接口句柄发送消息即可。

远程接口具有如下特点:

1) 远程接口必须为public属性。如果不这样,除非客户端与远程接口在同一个包内,否则 当试图装入实现该远程接口的远程对象时,调用会得到错误结果。

2) 远程接口必须扩展接口java.rmi.Remote。

3) 除与应用程序本身特定的例外之外,远程接口中的每个方法都必须在自己的throws从句中 声明java.rmi.RemoteException。(或 RemoteException 的父类)。

4) 作为参数或返回值传递的一个远程对象(不管是直接,还是本地对象中嵌入)必须声明为远 程接口,而不应声明为实施类。

下面是远程接口的定义

[java] view plaincopy

package test;

import java.rmi.Remote;

import java.rmi.RemoteException;

import java.math.BigInteger;

public interface Fib extends Remote {

public int getFib(int n) throws RemoteException;

// public BigInteger getFib(BigInteger n) throws RemoteException;

}

二、实现远程接口:

远程对象实现类必须扩展远程对象java.rmi.UnicastRemoteObject类,并实现所定义的远程接口。远程对象的实现类中包含实现每个远程接口所指定的远程方法的代码。这个类也可以含有附加的方法,但客户只能使用远程接口中的方法。因为客户是指向接口的一个句柄,而不是它的哪个类。必须为远程对象定义构造函数,即使只准备定义一个默认构造函数,用它调用基础类构造函数。因为基础类构造函数可能会抛出 java.rmi.RemoteException,所以即使别无它用必须抛出java.rmi.RemoteException例外。

以下是远程对象实现类的声明:

[java] view plaincopy

package test;

import java.math.BigInteger;

import java.rmi.*;

import java.rmi.server.UnicastRemoteObject;

public class FibImp extends UnicastRemoteObject implements Fib {

public FibImp() throws RemoteException {

super();

}

public int getFib(int n) throws RemoteException {

return n+2;

}

}

三、编写服务器类:

包含 main 方法的类可以是实现类自身,也可以完全是另一个类。下面通过RmiSampleServer 来创建一个远程对象的实例,并通过java.rmi.registry.LocateRegistry类的createRegistry 方法从指定端口号启动注册服务程序,也可以通过执行 rmiregistry 命令启动注册服务程序,注册服务程序的缺省运行端口为 1099。必须将远程对象名字绑定到对远程对象的引用上: Naming.rebind("//localhost:8808/SAMPLE-SERVER" , Server);

以下是服务器类的声明:

[java] view plaincopy

package test;

import java.net.MalformedURLException;

import java.rmi.Naming;

import java.rmi.RemoteException;

import java.rmi.registry.LocateRegistry;

public class FibonacciServer {

/**

* @param args

*/

public static void main(String[] args) {

try {

LocateRegistry.createRegistry(8804);

FibImp f = new FibImp();

// 注册到 registry 中

Naming.rebind("//localhost:8804/SAMPLE-SERVER", f);

System.out.println("fib server ready");

} catch (RemoteException re) {

System.out.println("Exception in FibonacciImpl.main: " + re);

} catch (MalformedURLException e) {

System.out.println("MalformedURLException " + e);

}

}

}

四、编写使用远程服务的客户机类:

客户机类的主要功能有两个,一是通过Naming.lookup方法来构造注册服务程序 stub 程序实例,二是调用服务器远程对象上的远程方法。

以下是客户端类的声明:

[java] view plaincopy

package testClient;

import test.Fib;

import java.math.BigInteger;

import java.net.MalformedURLException;

import java.rmi.Naming;

import java.rmi.NotBoundException;

import java.rmi.RemoteException;

public class FibClient {

/**

* @param args

*/

public static void main(String[] args) {

String url = "//localhost:8804/SAMPLE-SERVER";

try {

Fib calc = (Fib) Naming.lookup(url);

for (int i = 0; i 10; ++i) {

int f = calc.getFib(i);

System.out.println(f);

}

} catch (MalformedURLException e) {

e.printStackTrace();

} catch (RemoteException e) {

e.printStackTrace();

} catch (NotBoundException e) {

e.printStackTrace();

}

}

}

关于java远和java远程调用接口几种方式的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-11-23,除非注明,否则均为首码项目网原创文章,转载请注明出处。