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再与远端打交道

原文地址:https://www.cnblogs.com/joyous-day/p/6889532.html