XML-RPC也是一种和RMI类似的远程调用的协议,它和RMI的不同之处在于它以标准的xml格式来定义请求的信息(请求的对象、方法、参数等),这样的好处是什么呢,就是在跨语言通讯的时候也可以使用 。
来看下XML-RPC协议的一次远程通信过程:
- 客户端发起请求,按照XML-RPC协议将请求信息进行填充;
- 填充完毕后将xml转化为流,通过传输协议进行传输;
- 接收到在接收到流后转换为xml,按照XML-RPC协议获取请求的信息并进行处理;
- 处理完毕后将结果按照XML-RPC协议写入xml中并返回 。
同样来回答问题:
- 传输的标准格式是?标准格式的XML 。
- 怎么样将请求转化为传输的流?将XML转化为流 。
- 怎么接收和处理流?通过监听的端口获取到请求的流,转化为XML,并根据协议获取请求的信息,进行处理并将结果写入XML中返回 。
- 传输协议是?Http 。
3.3 Binary-RPC
Binary-RPC看名字就知道和XML-RPC是差不多的了,不同之处仅在于传输的标准格式由XML转为了二进制的格式 。
同样来回答问题:
- 传输的标准格式是?标准格式的二进制文件 。
- 怎么样将请求转化为传输的流?将二进制格式文件转化为流 。
- 怎么接收和处理流?通过监听的端口获取到请求的流,转化为二进制文件,根据协议获取请求的信息,进行处理并将结果写入XML中返回 。
- 传输协议是?Http 。
3.4 SOAP
SOAP原意为Simple Object Access Protocol,是一个用于分布式环境的、轻量级的、基于XML进行信息交换的通信协议,可以认为SOAP是XML RPC的高级版,两者的原理完全相同,都是http+XML,不同的仅在于两者定义的XML规范不同,SOAP也是Webservice采用的服务调用协议标准,因此在此就不多加阐述了 。
Web Service提供的服务是基于web容器的,底层使用http协议,类似一个远程的服务提供者,比如天气预报服务,对各地客户端提供天气预报,是一种请求应答的机制,是跨系统跨平台的 。就是通过一个servlet,提供服务出去 。
首先客户端从服务器获得WebService的WSDL,同时在客户端生成一个代理类(Proxy Class),这个代理类负责与WebService服务器进行Request和Response 。当一个数据(XML格式的)被封装成SOAP格式的数据流发送到服务器端的时候,就会生成一个进程对象并且把接收到这个Request的SOAP包进行解析,然后对事物进行处理,处理结束以后再对这个计算结果进行SOAP包装,然后把这个包作为一个Response发送给客户端的代理类(Proxy Class),同样地,这个代理类也对这个SOAP包进行解析处理,继而进行后续操作 。这就是WebService的一个运行过程 。
Web Service大体上分为5个层次:
- Http传输信道;
- XML的数据格式;
- SOAP封装格式;
- WSDL的描述方式;
- UDDI UDDI是一种目录服务,企业可以使用它对Webservices进行注册和搜索;
3.5 JMS
JMS是实现java领域远程通信的一种手段和方法,基于JMS实现远程通信时和RPC是不同的,虽然可以做到RPC的效果,但因为不是从协议级别定义的,因此我们不认为JMS是个RPC协议,但它确实是个远程通信协议,在其他的语言体系中也存在着类似JMS的东西,可以统一的将这类机制称为消息机制,而消息机制呢,通常是高并发、分布式领域推荐的一种通信机制,这里的主要一个问题是容错 。
JMS是Java的消息服务,JMS的客户端之间可以通过JMS服务进行异步的消息传输 。JMS支持两种消息模型:Point-to-Point(P2P)和Publish/Subscribe(Pub/Sub),即点对点和发布订阅模型 。
来看JMS中的一次远程通信的过程:
- 客户端将请求转化为符合JMS规定的Message;
- 通过JMS API将Message放入JMS Queue或Topic中;
- 如为JMS Queue,则发送中相应的目标Queue中,如为Topic,则发送给订阅了此Topic的JMS Queue 。
- 处理端则通过轮训JMS Queue,来获取消息,接收到消息后根据JMS协议来解析Message并处理 。
同样来回答问题:
- 传输的标准格式是?JMS规定的Message 。
- 怎么样将请求转化为传输的流?将参数信息放入Message中即可 。
- 怎么接收和处理流?轮训JMS Queue来接收Message,接收到后进行处理,处理完毕后仍然是以Message的方式放入Queue中发送或Multicast 。
- 传输协议是?不限 。
基于JMS也是常用的实现远程异步调用的方法之一 。
4 之间的区别
推荐阅读
- Java 读取本地 JSON 文件
- Java中如何实现线程的超时中断
- 1分钟带你看懂Java内部类
- HTML5 的JavaScript 客户端PDF解决方案——jsPDF
- JavaScript核心概念归纳整理
- 如何批量导入电话号码到手机通讯录
- 苹果手机怎么批量删除通讯录联系人?简单实用方法总结
- Javascript事件轮询
- 这篇java的NIO编程,保证你能看懂
- 1分钟读懂JavaScript、Ajax、jQuery全部知识点