`
wocsok
  • 浏览: 10859 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Java远程通讯可选技术及原理(一)(转载)

阅读更多
作者:Hongyuan029 

在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如:RMI、MINA、ESB、Burlap、Hessian、SOAP、EJB和JMS 等,这些名词之间到底是些什么关系呢,它们背后到底是基于什么原理实现的呢,了解这些是实现分布式服务框架的基础知识,而如果在性能上有高的要求的话,那深入了解这些技术背后的机制就是必须的了,在这篇blog中我们将来一探究竟,抛砖引玉,欢迎大家提供更多的实现远程通讯的技术和原理的介绍。

基本原理

要实现网络机器间的通讯,首先得来看看计算机系统网络通信的基本原理,在底层层面去看,网络通信需要做的就是将流从一台计算机传输到另外一台计算机,基于传输协议和网络IO来实现,其中传输协议比较出名的有 http、tcp、udp等等,http、tcp、udp都是在基于Socket概念上为某类应用场景而扩展出的传输协议,网络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. 基于socket将序列化后的流传输至服务器端;
4. 服务器端接收到流后转发至相应的skelton类;
5. skelton类将请求的信息反序列化后调用实际的处理类;
6. 处理类处理完毕后将结果返回给skelton类;
7. Skelton类将结果序列化,通过socket将流传送给客户端的stub;
8. stub在接收到流后反序列化,将反序列化后的Java Object返回给调用者。

根据原理来回答下之前学习应用级协议带着的几个问题:

1. 传输的标准格式是什么?
是Java ObjectStream。
2. 怎么样将请求转化为传输的流?
基于Java串行化机制将请求的java object信息转化为流。
3. 怎么接收和处理流?
根据采用的协议启动相应的监听端口,当有流进入后基于Java串行化机制将流进行反序列化,并根据RMI协议获取到相应的处理对象信息,进行调用并处理,处理完毕后的结果同样基于java串行化机制进行返回。
4. 传输协议是?
Socket。

XML-RPC

XML-RPC也是一种和RMI类似的远程调用的协议,它和RMI的不同之处在于它以标准的xml格式来定义请求的信息(请求的对象、方法、参数等),这样的好处是什么呢,就是在跨语言通讯的时候也可以使用。

来看下XML-RPC协议的一次远程通信过程:

1. 客户端发起请求,按照XML-RPC协议将请求信息进行填充;
2. 填充完毕后将xml转化为流,通过传输协议进行传输;
3. 接收到在接收到流后转换为xml,按照XML-RPC协议获取请求的信息并进行处理;
4. 处理完毕后将结果按照XML-RPC协议写入xml中并返回。

同样来回答问题:

1. 传输的标准格式是?
标准格式的XML。
2. 怎么样将请求转化为传输的流?
将XML转化为流。
3. 怎么接收和处理流?
通过监听的端口获取到请求的流,转化为XML,并根据协议获取请求的信息,进行处理并将结果写入XML中返回。
4. 传输协议是?
Http。

Binary-RPC

Binary-RPC看名字就知道和XML-RPC是差不多的了,不同之处仅在于传输的标准格式由XML转为了二进制的格式。

同样来回答问题:

1. 传输的标准格式是?
标准格式的二进制文件。
2. 怎么样将请求转化为传输的流?
将二进制格式文件转化为流。
3. 怎么接收和处理流?
通过监听的端口获取到请求的流,转化为二进制文件,根据协议获取请求的信息,进行处理并将结果写入XML中返回。
4. 传输协议是?
Http。

SOAP

SOAP原意为Simple Object Access Protocol,是一个用于分布式环境的、轻量级的、基于XML进行信息交换的通信协议,可以认为SOAP是XML RPC的高级版,两者的原理完全相同,都是http+XML,不同的仅在于两者定义的XML规范不同,SOAP也是Webservice采用的服务调用协议标准,因此在此就不多加阐述了。

CORBA

Common Object Request Broker Architecture(公用对象请求代理[调度]程序体系结构),是一组用来定义“分布式对象系统”的标准,由OMG(Object Menagement Group)作为发起和标准制定单位。CORBA的目的是定义一套协议,符合这个协议的对象可以互相交互,不论它们是用什么样的语言写的,不论它们运行于什么样的机器和操作系统。
CORBA在我看来是个类似于SOA的体系架构,涵盖可选的远程通信协议,但其本身不能列入通信协议这里来讲,而且CORBA基本淘汰,再加上对CORBA也不怎么懂,在此就不进行阐述了。

JMS

JMS呢,是实现java领域远程通信的一种手段和方法,基于JMS实现远程通信时和RPC是不同的,虽然可以做到RPC的效果,但因为不是从协议级别定义的,因此我们不认为JMS是个RPC协议,但它确实是个远程通信协议,在其他的语言体系中也存在着类似JMS的东西,可以统一的将这类机制称为消息机制,而消息机制呢,通常是高并发、分布式领域推荐的一种通信机制,这里的主要一个问题是容错(详细见ErLang论文)。

来看JMS中的一次远程通信的过程:

1. 客户端将请求转化为符合JMS规定的Message;
2. 通过JMS API将Message放入JMS Queue或Topic中;
3. 如为JMS Queue,则发送中相应的目标Queue中,如为Topic,则发送给订阅了此Topic的JMS Queue。
4. 处理端则通过轮训JMS Queue,来获取消息,接收到消息后根据JMS协议来解析Message并处理。

回答问题:

1. 传输的标准格式是?
JMS规定的Message。
2. 怎么样将请求转化为传输的流?
将参数信息放入Message中即可。
3. 怎么接收和处理流?
轮训JMS Queue来接收Message,接收到后进行处理,处理完毕后仍然是以Message的方式放入Queue中发送或Multicast。
4. 传输协议是?
不限。

基于JMS也是常用的实现远程异步调用的方法之一。
原文地址:
http://java.csdn.net/index.php/2009/08/11/java%e8%bf%9c%e7%a8%8b%e9%80%9a%e8%ae%af%e5%8f%af%e9%80%89%e6%8a%80%e6%9c%af%e5%8f%8a%e5%8e%9f%e7%90%86%ef%bc%88%e4%b8%80%ef%bc%89/
分享到:
评论

相关推荐

    Java远程通讯可选技术及原理(一)

    Java远程通讯可选技术及原理(一)

    Java远程通讯可选技术及原理

    Java远程通讯技术是构建分布式系统的关键,涉及到多种技术如RMI、MINA、ESB、Burlap、Hessian、SOAP、EJB和JMS等。这些技术在不同的场景下有着各自的优势和适用范围,理解它们的工作原理对于优化系统性能至关重要。 ...

    Java实现远程控制技术(附完整源代码)

    在IT行业中,远程控制技术是一种重要的工具,尤其在在线教育、技术支持和远程协作等领域中扮演着关键角色。本文将深入探讨如何使用Java实现远程控制功能,并结合提供的源代码进行解析。 首先,Java作为一种跨平台的...

    Java实现调用远程桌面示例

    在IT行业中,远程桌面功能是不可或缺的一部分,它允许用户通过网络连接到另一台计算机并进行交互操作。在Java编程环境中,实现这样的功能可以借助各种库和框架。本篇将深入探讨如何利用`properJavaRDP`这个开源项目...

    java 读取远程文件目录 及文件方式

    本文件是将 Java 中 通过远程url访问 转换成 HTML 文件 ,通过 dom4j转换成Java对象元素

    Java实现的远程控制

    Java 远程控制 SocketJava 远程控制 SocketJava 远程控制 SocketJava 远程控制 SocketJava 远程控制 SocketJava 远程控制 SocketJava 远程控制 Socket

    Java实现远程桌面连接

    Java实现远程桌面连接的properjavardp源码工程,可直接运行。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。...

    Java远程控制系统2 桌面控制 (类似net-meeting)毕业设计 源代码

    Java远程控制系统,如同标题所提及的“Java远程控制系统2 桌面控制”,是一种基于Java技术实现的桌面共享和远程管理工具,它允许用户通过网络连接远程操控另一台计算机的桌面,实现类似NetMeeting的功能。...

    java远程监控源码

    标题“Java远程监控源码”涉及的是Java编程中关于远程监控和控制的实现。这个项目可能包含一个客户端(client)和服务器端(server)的架构,通过Socket通信进行数据交互,利用Java Robot类来捕获屏幕图像,以及...

    java,jsp读取远程图片到本地服务器

    Java是一种广泛使用的后端编程语言,而JSP(JavaServer Pages)是构建动态web应用程序的一种技术。JSP允许开发者在HTML中嵌入Java代码,以便与服务器进行交互。 2. **HTTP请求和响应**: 为了从远程服务器获取...

    java通过代码登录远程linux服务器并执行linux命令源码以及jar包

    在Java编程中,有时我们需要实现一个功能,即通过代码远程登录Linux服务器并执行特定的Linux命令。这在自动化运维、远程脚本执行等场景中非常常见。本篇将详细讲解如何实现这一目标,并提供相关源码及jar包。 首先...

    JAVA读取远程网页文件并保存本地

    JAVA读取远程网页文件并保存本地 从远程URL地址获取网页文件下载到本地 这个方法可以生成静态HTML文件使用!

    java远程屏幕监控系统(精华)

    一、Java远程屏幕监控系统的技术原理 1. Java RMI(Remote Method Invocation):Java远程方法调用是Java平台提供的用于分布式计算的关键技术。RMI使得一个Java对象可以调用另一个位于不同JVM中的对象的方法,这...

    Java实现远程桌面(参赛作品)

    在IT领域,远程桌面连接是一种常见的技术,它允许用户通过网络访问并控制另一台计算机的桌面环境。在这个项目中,"Java实现远程桌面"是一个使用纯Java编程语言编写的远程桌面解决方案,它使得用户能够在一台计算机上...

    Java OCR 图像智能字符识别技术,可识别中文

    Java OCR(Optical Character Recognition,光学字符识别)技术是一种计算机视觉领域的应用,它能将图像中的文字转换成可编辑的文本格式。这项技术在各种场景下都有广泛应用,比如文档扫描、车牌识别、发票处理等。...

    Java技术实现跨平台的远程屏幕监视.pdf

    本文将详细介绍Java技术实现跨平台的远程屏幕监视的原理、关键技术和实现方法。 1. 屏幕监视系统的基本原理 屏幕监视系统是指通过网络将远程计算机的屏幕内容传输到本地计算机,以便进行远程监控、远程教学辅导、...

    用java实现远程文件传输

    在Java编程环境中,实现远程文件传输是一项常见的任务,特别是在分布式系统和网络应用中。这个小程序可能涉及到了几个关键的Java技术点,包括网络编程、I/O流处理以及可能的多线程技术。以下是对这些知识点的详细...

    黑天鹅远控--java远程控制软件

    用java编写的功能强大的远程控制软件,并且为开源软件。主要功能有, 生成服务器、屏幕监视,屏幕控制、上传文件、下载文件、远程命令、远程任务管理器、 发送警告、相互聊天、换皮肤、版本升级提醒等功能 有兴趣的...

    Java RMI实现远程控制程序及源代码

    使用Java的RMI来实现远程控制的小程序,类似qq的远程协助。 本程序是根据网上看到的源代码改写而成,主要在用户界面和服务端与客户端的交互上增加了许多功能,并对代码结构进行了重新组织。里面附有原作者的链接,...

    java与plc通讯示例代码

    在工业自动化领域,Java语言与PLC(可编程逻辑控制器)的通信是常见的需求,用于实现远程监控、数据采集和设备控制。本示例代码利用了Modbus协议,这是一种广泛应用于工业设备间通信的开放标准协议。Modbus4J是一个...

Global site tag (gtag.js) - Google Analytics