网吧远程调用 (网吧远程桌面)
本文目录导航:
网吧远程调用
一、Java中的远程方法调用 远程方法调用(Remote Method Invocation, RMI)是Java1.1引入的散布式对象软件包,它的发生简化了在多台机器上的Java运行之间的通讯。
相比CORBA,RMI配置较弱且只能用于Java系统。
二、成功一个繁难的RMI 要经常使用RMI,必定结构四个重要的类:远程对象的本地接口、RMI客户、远程对象成功和RMI主机。
RMI主机生成远程对象成功的一个实例,并用一个不凡的URL注册它,RMI客户在远程主机上查找对象,若找到就把它转换老本地接口类型,而后像一个本地对象一样经常使用它。
上方是一个繁难的RMI例子,远程对象只前往一个信息字符串。
要使这个例子更有价值,咱们须要做的就是完善远程对象成功类。
1.远程对象的本地接口类() 该类仅仅是一个接口,而不是成功,RMI客户机可以间接经常使用它,RMI主机必定经过一个远程对象来成功它,并用某个URL注册它的一个实例。
import .*; public interface Rem extends Remote { public String getMessage() throws RemoteException;} 本地接口(Rem)必定是公共的,否则客户机在加载一个成功该接口的远程对象时就会出错。
此外,它还必定从承袭而来,接口中的每一个方法都必定抛出远程意外。
客户类() RMI客户经常使用在指定的远程主机上查找对象,若找到就把它转换老本地接口Rem类型,而后像一个本地对象一样经常使用它。
与CORBA不同之处在于RMI客户必定知道提供远程服务主机的URL,这个URL可以经过rmi://host/path或rmi://host:port/path来指定,假设省略端口号,就经常使用1099。
或者发生三个意外:RemoteException、NotBoundException、MalformedURLException,三个寻常都须要捕捉。
RemoteException、Naming和NotBoundException在.*中定义,MalformedURLException在.*中定义。
另外,客户机将向远程对象传递串行化对象Serializable,所以还应在程序中输入.*。
import .*; import .*; import .*; public class RemClient { public static void main(String[] args) { try { String host = ( > 0) ? args[0] : localhost; file://从命令行读取远程主机名 file://经过URL在远程主机上查找对象,并把它转化为本地接口Rem类型 Rem remObject=(Rem)(rmi:// + host + /Rem); (()); file://调用远程对象的方法 } catch(RemoteException re) {(RemoteException: + re); <br/><br/>} catch(NotBoundException nbe) {(NotBoundException: + nbe); <br/><br/>} catch(MalformedURLException mfe){(MalformedURLException:+ mfe); <br/><br/>}}} 3.远程对象成功类() 这个类真正成功RMI客户调用的远程对象,它必定从UnicastRemoteObject承袭,其结构函数应抛出RemoteException意外。
import .*; import ; public class RemImpl extends UnicastRemoteObject implements Rem { public RemImpl() throws RemoteException {} file://结构函数抛出RemoteException意外 public String getMessage() throws RemoteException { return(Here is a remote message.); }} file://向RMI客户前往一个信息串 主机类() 该类创立远程对象成功RemImpl的一个实例,而后用一个特定的URL来注册它,所谓注册就是经过或来将RemImpl实例绑定到URL上。
import .*; import .*; public class RemServer { public static void main(String[] args) { try { RemImpl localObject = new RemImpl(); file://生成远程对象成功的一个实例 (rmi:///Rem, localObject); file://将远程对象实例绑定到rmi:///Rem上 }catch(RemoteException re){(RemoteException:+re); <br/><br/>}catch(MalformedURLException mfe) {(MalformedURLException: +mfe); <br/><br/>}}} 三、编译和运转 1.如何在Java中成功远程方法调用(1) 2.如何在Java中成功远程方法调用(2) 编译RMI客户和主机,这将智能编译远程对象的本地接口和远程对象成功 Javac file://智能编译远程对象的本地接口 Javac file://智能编译远程对象成功 2. 生成客户承接模块和主机框架 rmic RemImpl 这将结构RemImpl_和RemImpl_。
请将、和RemImpl_拷贝到RMI客户机,将、 、和RemImpl_拷贝到RMI主机。
3. 启动RMI注册 rmiregistry file://在主机上口头。
不论有多少个远程对象,本操作只有做一次性 4. 运转 Java file://启动RMI主机(在主机上口头) Java file://启动RMI客户,将输入“Here is a remote message.”
两边件有多种类型,Java的RMI FJB 属于()两边件。
【答案】:B通常将两边件分为数据库访问两边件、远程环节 调用两边件、面向信息两边件、事务两边件、散布式对象两边件等。
(1)数据库访问两边件:经过一个形象层访问数据库,从而准许经常使用相反或相似的 代码访问不同的数据库资源。
典型技术如Windows平台的ODBC和Java平台的JDBC等。
(2)远程环节调用两边件(Remote Procedure Call,RPC):是一种散布式运行程序 的解决方法。
一个运行程序可以经常使用RPC来“远程”口头一个位于不同地址空间内的过 程,从成果上看和口头本地调用相反。
一个RPC运行分为主机和客户两个局部。
主机提供一个或多个远程操作环节; 客户向主机收回远程调用。
主机和客户可以位于同一台计算机,也可以位于不同的 计算机,甚至可以运转在不同的操作系统之上。
客户和主机之间的网络通讯和数据转 换经过代理程序(Stub与Skeleton)成功,从而屏蔽了不同的操作系统和网络协定。
(3)面向信息两边件(Message-OrientedMiddleware,MOM):应用高效牢靠的信息 传递机制启动平台有关的数据传递,并可基于数据通讯启动散布系统的集成。
经过提供 信息传递和信息队列模型,可在散布环境下裁减进程间的通讯,并支持多种通讯协定、 言语、运行程序、配件和软件平台。
典型产品如IBM的MQSeries。
(4)散布式对象两边件:是建设对象之间客户/主机相关的两边件,联合了对象技 术与散布式计算技术。
该技术提供了一个通讯框:架,可以在异构散布计算环境中透明_ 传递对象恳求。
典型产品如OMG的CORBA、Java的RMI/FJB、Microsoft的DCOM[等。
(5)事务两边件:也称事务解决监控器(Transaction Processing Monitor, TPM),提供特大规模事务解决的牢靠运转环境。
TPM位于客户和主机之间,成功事务治理与 调、负载平衡、失效复原等义务,以提高系统的全体性能。
典型产品如IBM/BEA的 Tuxedo联合对象技术的对象事务监控器(object Transaction Monitor, OTM)如支持 EJB的JavaEE运行主机等。
java的远程调试是基于什么协定
RMI是java言语自身提供的远程通讯协定,稳固高效,是EJB的基础。
但它只能用于JAVA程序之间的通讯。
Hessian和Burlap是caucho公司提供的开源协定,基于HTTP传输,服务端不用开防火墙端口。
协定的规范地下,可以用于恣意言语。
Httpinvoker是SpringFramework提供的远程通讯协定,只能用于JAVA程序间的通讯,且服务端和客户端必定经常使用SpringFramework。
Web service是衔接异构系统或异构言语的首选协定,它经常使用SOAP方式通讯,可以用于任何言语,目前的许多开发工具对其的支持也很好。
RMI > Httpinvoker >= Hessian >> Burlap >> web serviceRMI不愧是JAVA的首选远程调用协定,十分高效稳固,特意是在大数据量的状况下,与其余通讯协定的差距尤为显著。
HttpInvoker经常使用java的序列化技术传输对象,与RMI在实质上是分歧的。
从效率上看,两者也相差无几,HttpInvoker与RMI的传输期间基本持平。
Hessian在传输大批对象时,比RMI还要极速高效,但传输数据结构复杂的对象或少量数据对象时,较RMI要慢20%左右。
Burlap仅在传输1条数据时速度尚可,通常状况下,它的毫时是RMI的3倍。
Web Service的效率低下是妇孺皆知的,平均来看,Web Service的通讯毫时是RMI的10倍。
二、结果剖析1、间接调用间接调用的一切毫时都凑近0,这说明程序解决简直没有破费期间,记载的所有期间都是远程调用消耗的。
2、RMI调用与想象的一样,RMI天经地义是最快的,在简直一切的状况下,它的毫时都是起码的。
特意是在数据结构复杂,数据量大的状况下,与其余协定的差距尤为显著。
为了充散施展RMI的性能,另外做了测试类,不经常使用Spring,用原始的RMI方式 (承袭UnicastRemoteObject对象)提供服务并远程调用,与Spring对POJO包装成的RMI启动效率比拟。
结果显示:两者基本持 平,Spring提供的服务还稍快些。
初步以为,这是由于Spring的代理缓和存机制比拟弱小,节俭了对象从新失掉的期间。
3、Hessian调用caucho公司的resin主机号称是最快的主机,在java畛域有必定的出名 度。
Hessian做为resin的组成局部,其设计也十分精简高效,实践运转状况也证实了这一点。
平均来看,Hessian较RMI要慢20%左右,但 这只是在数据量特意大,数据结构很复杂的状况下才干表现进去,中等或大批数据时,Hessian并不比RMI慢。
Hessian的好处是精简高效,可以跨言语经常使用,而且协定规范地下,咱们可以针对恣意言语开发对其协定的成功。
目前已有成功的言语有:java, c++, , python, ruby。
还没有delphi的成功。
另外,Hessian与WEB主机联合十分好,借助WEB主机的成熟配置,在解决大 量用户并发访问时会有很大长处,在资源调配,线程排队,意外解决等方面都可以由成熟的WEB主机保障。
而RMI自身并不提供多线程的主机。
而 且,RMI须要开防火墙端口,Hessian不用。
4、Burlap调用Burlap与Hessian都是caucho公司的开源产品,只不过Hessian驳回二进制的方式,而Burlap驳回xml的格局。
测试结果显示,Burlap在数据结构不复杂,数据量中等的状况下,效率还是可以接受的,但假设数据量大,效率会急剧降低。
平均计算,Burlap的调用毫时是RMI的3倍。
我以为,其效率低有两方面的要素,一个是XML数据形容内容太多,雷同的数据结构,其传输量要大很多;另一方面,妇孺皆知,对xml的解析是比拟费资源的,特意关于大数据量状况下更是如此。
5、HttpInvoker调用HttpInvoker是SpringFramework提供的JAVA远程调用方法,经常使用java的序列化机制解决对象的传输。
从测试结果看,其效率还是可以的,与RMI基本持平。
不过,它只能用于JAVA言语之间的通讯,而且,要求客户端和服务端都经常使用SPRING框架。
另外,HttpInvoker 并没有经过通常的测验,目前还没有找到运行该协定的名目。
6、web service调用 本次测试决定了apache的AXIS组件作为WEB SERVICE的成功,AXIS在WEB SERVICE畛域相对成熟老牌。
为了仅测试数据传输和编码、解码的期间,客户端和服务端都经常使用了缓存,对象只有实例化一次性。
然而,测试结果显示,web service的效率还是要比其余通讯协定慢10倍。
假设思考到多个援用指向同一对象的传输状况,web service要落后更多。
由于RMI,Hessian等协定都可以传递援用,而web service有多少个援用,就要复制多少份对象实体。
Web service传输的冗余信息过多是其速度慢的要素之一,监控发现,雷同的访问恳求,形容相反的数据,web service前往的数据量是hessian协定的6.5倍。
另外,WEB SERVICE的解决也很毫时,目前的xml解析器效率广泛不高,解决xml <-> bean很毫资源。
从测试结果看,他乡调用比本地调用要快,也从正面说明了其毫时重要用在编码和解码xml文件上。
这比冗余信息更为重大,冗余信息占用的 只是网络带宽,而每次调用的资源消耗间接影响到主机的负载才干。
(MS的工程师曾说过,用WEB SERVICE不能负载100个以上的并发用户。
)测试环节中还发现,web service编码不甚繁难,对非基本类型须要一一注册序列化和反序列化类,很费事,生成stub更累,不如spring + RMI/hessian解决那么流利繁复。
而且,web service不支持汇合类型,只能用数组,不繁难。
ITjob学。
到的