1. 简介

RMI和CMRT都是Java远程方法调用的技术,它们可以使得分布式系统中不同的程序或者服务器之间进行远程方法的调用。这种技术可以使得程序员更加方便地进行分布式系统开发,使得程序的可扩展性,可维护性等方面更加得到提升。接下来,我们将对这两种技术进行一一介绍。

 简介

2. RMI(Remote Method Invocation)

RMI是Java中内置的一种远程方法调用技术,它基于Java的序列化和反序列化机制来完成方法的调用。在一个分布式系统中,我们需要将服务端的对象拷贝到客户端,然后在客户端调用这个对象的方法,这时RMI就能够发挥作用。RMI会将要调用的方法的信息序列化成字节流,然后将这个字节流传输给服务端。服务端需要反序列化这个字节流,根据字节流中的方法名和参数等信息来调用相应的方法。然后将返回值再序列化成字节流,传输给客户端。这一过程需要Java中的ObjectInputStream和ObjectOutputStream来完成。

3. CMRT(Communicating Sequential Processes based Remote Method Invocation)

CMRT是另一种Java中的远程方法调用技术,它基于CSP(Communicating Sequential Processes)模型来实现分布式系统中的方法调用。CSP是由Tony Hoare于1978年发明的一种并发计算模型。在CSP模型中,计算单元通过发送和接收消息进行通信与同步。在CMRT中,每个对象都有一个消息队列,它接受来自客户端或者其他服务器的请求消息,并将这些消息作为线程来执行。客户端或者其他服务器需要等待该消息的处理结果,直到消息执行完毕,才能获取返回值。这个过程与Java中的Future模式有些类似。

4. RMI和CMRT的比较

相比较于CMRT,RMI能够直接调用方法,而不需要通过消息传递来实现。这使得RMI的方法调用更加高效,但是也会增加方法调用的风险。如果服务端对象的状态发生了变化,且客户端在调用之前获取了一份服务端对象的引用,这时客户端得到的结果可能不是最新的。此时,我们需要使用Java中的synchronized关键字来解决问题。

另一方面,CMRT更加灵活,因为它实现了CSP模型,使得不同的计算单元之间通过传递消息进行交互。这种方式可以更加方便的实现分布式系统的负载均衡和故障恢复。此外,CMRT还可以增加较好的安全性。但是,由于CMRT需要等待消息有空闲线程来处理,这使得CMRT的获得结果的时间比RMI更加延迟。


文章TAG:java  远程  远程方法调用  方法  rmi  Java远程方法调用之RMI和CMRT  
下一篇