Java 分布式通信的几种方式及其特点?

相关阅读:

1. Java 分布式通信的几种方式及其特点

2. Java WebService异构系统通信的原理及特点:SOAP与WSDL

3.Java EJB、CORBA、Webservices分布式通信基本原理及特点

4. Java 远程调用与分布式通信的区别

假设有两个服务器,本地的服务器采用的是Java开发的远程的是一个采用C#开发的天气预报的服务器,二者可以通过以下几种方式通信

1、如果二者不采用某些技术来通信的话,也是可以的

比如远程服务器开放数据库表,然后本地服务器使用JDBC访问这个开放的数据库表,也能够实现分布式通信

只不过开放数据库表的做法,不太好。会暴露表结构、安全性也不是特别好、并且也是不标准的

另外有些数据,并不是单纯的一张表就能体现出来的,可能要通过一定的算法计算出来结果的

2、如果二者采用WebServices通信的话,那么就是使用SOAP协议来交互数据,该数据就是采用HTTP协议传送XML文件

但此时双方进行通信的过程中,由于采用的是SOAP协议,所以双方交换的数据是大文本(通常是XML文件)文件

这时就有一个问题:假设需要请求10000条数据,那么所交换的这个大文本文件的体积,将会是非常大的,传送的过程就会很耗时

有一个解决办法是:可以让Java通过它的ZIP API压缩该XML文件,然后上传到FTPServer上,服务端再下载这个压缩后的XML文件

接着服务端再解压缩这个XML文件,然后读取,再进行相应的处理,这也是解决SOAP协议传递大文本文件的速度特别慢的办法之一

3、可以令远程服务器把天气预报的数据,定时的上报到某一个FTPServer,然后客户端的Java程序也定时的到FTPServer上取数据

4、第三种方式的缺点是不实时。我们也可以让客户端发送消息给远程的服务端,服务端会侦听,然后再发送消息返回给客户端

5、二者采用纯粹的IIOP(属于CORBA技术架构)协议来通信

6、如果远程服务器是采用EJB开发的,那么二者可以通过RMI-IIOP协议通信。而RMI-IIOP协议采用的是二进制传输,效率会更快

由于EJB也应用了CORBA的IIOP协议,所以在异构系统整合的时候,CORBA的互通性会比较好

步骤大致是服务器端先把EJB注射到JNDI树上,然后客户端的Java程序lookup这个JNDI树上对应的名字,这样EJB就传过来了

也就是说此时Stub就动态的传到客户端的Java程序中了,然后客户端就调用Stub,接下来就是Stub和Skeleton打交道了

另外EJB只能使用Java来写,但是可以使用CORBA技术来调用EJB

在EJB1.X的时候,对于分布式通信的服务的支持还很差

比如写一个EJB的话,则至少要写三个类,然后编译,编译成Stub和Skeleton,这时大约会编译出来5、6个类

后来有所改善,最先改的就是JBOSS。开发JBOSS的EJB容器的这个人,在Java技术上是非常厉害的一个人,传说中的大牛吧

引入了JDK的动态代理来完成Stub的自动生成,所以EJB的开发就简单了一些,只写三个类就可以了,存根会在运行时生成

也就是在把EJB注射到JNDI上之后,我们就可以在另一个JVM里面lookup这个JNDI的名字,这样便得到了EJB

然后它就会序列化的把EJB传送到客户端它传的就是Stub,而它在JVM内存里面是看不见的

当我们在客户端调用相应方法的时候,其实在内存里面调用的就是Stub,然后Stub再与远端打交道