Java 远程通讯可选技术及原理
在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如:RMI、MINA、ESB、Burlap、Hessian、SOAP、EJB和JMS等,这些名词之间到底是些什么关系呢,它们背后到底是基于什么原理实现的呢,了解这些是实现分布式服务框架的基础知识,而如果在性能上有高的要求的话,那深入了解这些技术背后的机制就是必须的了,在这篇 blog中我们将来一探究竟,抛砖引玉,欢迎大家提供更多的实现远程通讯的技术和原理的介绍。
基本原理
要实现网络机器间的通讯,首先得来看看计算机系统网络通信的基本原理,在底层层面去看,网络通信需要做的就是将流从一台计算机传输到另外一台计算机,基于传输协议和网络IO来实现,其中传输协议比较出名的有http、tcp、udp等等,http、tcp、udp都是在为某类应用场景而定义出的传输协议,网络IO,主要有bio、nio、aio三种方式,所有的分布式应用通讯都基于这个原理而实现,只是为了应用的易用,各种语言通常都会提供一些更为贴近应用易用的应用层协议。
应用级协议
远程服务通讯,需要达到的目标是在一台计算机发起请求,另外一台机器在接收到请求后进行相应的处理并将结果返回给请求端,这其中又会有诸如one way request、同步请求、异步请求等等请求方式,按照网络通信原理,需要实现这个需要做的就是将请求转换成流,通过传输协议传输至远端,远端计算机在接收到请求的流后进行处理,处理完毕后将结果转化为流,并通过传输协议返回给调用端。
原理是这样的,但为了应用的方便,业界推出了很多基于此原理之上的应用级的协议,使得大家可以不用去直接操作这么底层的东西,通常应用级的远程通信协议会提供:
1、为了避免直接做流操作这么麻烦,提供一种更加易用或贴合语言的标准传输格式;
2、网络通信机制的实现,就是替你完成了将传输格式转化为流,通过某种传输协议传输至远端计算机,远端计算机在接收到流后转化为传输格式,并进行存储或以某种方式通知远端计算机。
所以在学习应用级的远程通信协议时,我们可以带着这几个问题进行学习:
1、传输的标准格式是什么?
2、怎么样将请求转化为传输的流?
3、怎么接收和处理流?
4、传输协议是?
不过应用级的远程通信协议并不会在传输协议上做什么多大的改进,主要是在流操作方面,让应用层生成流和处理流的这个过程更加的贴合所使用的语言或标准,至于传输协议则通常都是可选的,在java领域中知名的有:RMI、XML-RPC、Binary-RPC、SOAP、CORBA、JMS,来具体的看看这些远程通信的应用级协议:
--------------------------------------------------------------------------------------------------------------------------------------------------
RMI
RMI是个典型的为java定制的远程通信协议,我们都知道,在single vm中,我们可以通过直接调用java object instance来实现通信,那么在远程通信时,如果也能按照这种方式当然是最好了,这种远程通信的机制成为RPC(Remote Procedure Call),RMI正是朝着这个目标而诞生的。
来看下基于RMI的一次完整的远程通信过程的原理:
1、客户端发起请求,请求转交至RMI客户端的stub类;
2、stub类将请求的接口、方法、参数等信息进行序列化;
3、基于tcp/ip将序列化后的流传输至服务器端;
4、服务器端接收到流后转发至相应的skelton类;
5、skelton类将请求的信息反序列化后调用实际的处理类;
6、处理类处理完毕后将结果返回给skelton类;
7、Skelton类将结果序列化,通过tcp/ip将流传送给客户端的stub;
8、stub在接收到流后反序列化,将反序列化后的Java Object返回给调用者。
来看jboss-remoting对于此过程的一个更好的图示:
根据原理来回答下之前学习应用级协议带着的几个问题:
1、传输的标准格式是什么?
是Java ObjectStream。
2、怎么样将请求转化为传输的流?
基于Java串行化机制将请求的java object信息转化为流。
3、怎么接收和处理流?
根据采用的协议启动相应的监听端口,当有流进入后基于Java串行化机制将流进行反序列化,并根据RMI协议获取到相应的处理对象信息,进行调用并处理,处理完毕后的结果同样基于java串行化机制进行返回。
4、传输协议是?
tcp/ip。
分享到:
相关推荐
本文将深入探讨“JAVA网络通信系统的研究与开发”和“java远程通信及应用的研究”,并结合提供的Java源码进行分析。 首先,我们要理解Java网络通信的基础。Java提供了丰富的API来支持网络编程,如Socket编程、...
Java远程桌面连接是一种技术,允许用户通过网络访问和控制远程计算机的桌面环境,类似于Windows操作系统中的Remote Desktop Protocol (RDP)。在Java中,我们通常使用Java Remote Method Invocation (Java RMI) 或 ...
远程通信协议在计算机网络技术中扮演着至关重要的角色,它支持不同计算机或软件之间的数据交换,使得跨地理位置的通信成为可能。随着网络技术和分布式计算需求的增长,远程通信协议的效率和功能性愈发受到重视。本...
TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。在Java中,我们可以使用`java.net.Socket`和`java.net.ServerSocket`类来建立客户端和服务器之间的TCP连接,实现数据的双向传输。双向...
RMI使用Java语言接口定义了远程对象,并集合了Java序列化和Java远程方法协议(Java Remote Method Protocol)。RMI使原先的程序在同一操作系统的方法调用,变成了不同操作系统之间程序的方法调用。 RMI的优点: * ...
`properJavaRDP`是一个用Java编写的远程桌面协议(RDP)客户端,它提供了对Windows远程桌面服务的访问支持。此项目旨在提供一个稳定且可扩展的平台,以便开发者能够在Java应用程序或Web应用中集成远程桌面功能。 ...
Java远程桌面控制系统是一种利用网络通信技术实现的软件应用,它允许用户通过互联网或其他网络连接,对远程计算机进行操作和管理,仿佛直接坐在那台电脑前一样。这种系统通常基于TCP/IP协议栈,采用Socket通信机制来...
Java编程语言在工业自动化和设备通信领域中广泛应用于实现Modbus通信协议,这是一种标准化的通信协议,用于设备间的数据交换。本项目提供了基于Modbus RTU(远程终端单元)和TCP(传输控制协议)的通信源码,适用于...
Java远程控制服务端和客户端源代码是利用Java内置的网络编程和GUI自动化工具包来实现的一种跨网络的交互功能。这种技术的核心在于`java.net.*`和`java.awt.robot.*`这两个包,它们分别提供了网络通信和模拟用户操作...
在IT领域,远程桌面连接是一种...总的来说,"Java实现远程桌面"项目涵盖了Java编程、网络通信、图像处理、多线程、输入/输出流、安全性和性能优化等多个IT领域的关键知识点,展示了Java在构建复杂系统中的强大能力。
Java远程控制后端源码是实现远程操作和管理软件系统的一种技术,主要涉及Java RMI(Remote Method Invocation)和SSH(Secure Shell)等协议。在Java中,远程控制通常指的是通过网络连接到另一台计算机,并执行该...
自由协议则是指在没有预定义的通信协议下,开发者根据实际需求自行设计的数据交换格式。 在"java实现485自由协议通讯"的项目中,开发者已经创建了一个Java程序,可以实现通过RS-485接口进行自定义协议的数据传输。...
6. 网络协议与Java远程通信的关系: - TCP/UDP:传输层的两个重要协议,RMI基于TCP协议进行通信,而UDP提供无连接的数据包传输。 - IO/BIO/NIO/AIO:Java网络编程中IO模型的不同实现,其中IO是阻塞IO模型,NIO是...
【Java远程通信技术——Axis实战】 在互联网时代,网络通信技术是软件开发不可或缺的一部分。TCP/IP和UDP/IP作为底层传输协议,承载了大部分网络数据,而HTTP协议则在此基础上提供了超文本传输。Java中,有多种远程...
Java的Socket编程也能实现远程通信。通过建立客户端和服务器之间的TCP连接,可以传输屏幕图像数据和控制指令。服务器端负责接收客户端请求,捕获屏幕并发送图像数据,而客户端则负责显示接收到的图像并处理用户输入...
RMI基于JRMP(Java Remote Messaging Protocol)协议进行通信,这是一种专门为Java远程对象设计的协议,确保了跨平台的兼容性,只要目标系统支持JRE(Java Runtime Environment),RMI应用就能在其中正常运行。...