1 摘要
远程服务通信,要达到一台计算机发起请求,另一台计算机收到请求后进行处理并将结果返回给请求端,这其中涉及到 one-way request、同步请求、异步请求等等请求方式,请求方将请求转换成流发送给远端,远端接收到流后进行处理,将结果集转换流再返回给请求端。应用协议为了便于业界开发应用级协议会提供:
1.避免直接操作流的麻烦,提供了一种易用或符号语言的标准传输格式
2.网络通信机制的实现,替我们完成了流的转换
应用级的远程通信协议不会在传输协议上做太大的改进,主要在流操作方面(应用层对流进行处理,传输协议可选)。在Java领域中知名的有:RMI、XML-RPC、JASON-RPC、BINARY-RPC、SOAP、CORBA、JMS。
2.1 RPC接口
RPC即远程过程调用,就像调用本地服务一样调用服务器服务。通常实现有XML-RPC、JASON-RPC,两者通信方式相同,不同在于传输协议。RPC按照响应式的不同分为同步调用和异步调用。
同步调用:客户端调用服务端方法,等待直到服务端返回结果或者超时,在继续下一步操作。同步调用的方式有Webservice和RMI两种,Webservice提供的服务基于web容器,底层采用Http协议,支持跨平台。RMI采用stubs和skeletons进行远程通讯就好比本地采用Tcp/IP协议进行通讯,stub和skeletons之间通信采用JRMP和IIOP两种流的协议,JRMP负责Java和Java的远程调用,IIOP负责Java和其他语言的CORBA实现互操作性。
异步调用:客户端将消息发送给中间件不需要等待响应,继续进行一下步操作;异步调用的方式是JMS,目前开源的JMS有kafka、Active MQ、RocketMQ。
2.2 Webservice接口
提供的服务基于web容器,底层采用Http协议,是一个远程服务提供者,是一种请求应答机制,支持跨平台。
运行原理:客户端从服务端得到WSDL,客户端定义一个代理类负责与webservice进行request和response对xml格式的数据进行SOAP封装发送给服务端,服务端进行解析对事物进行处理在进行SOAP包装,最后将这个包发送给客户端让代理类进行解析处理然后进行后续操作。(SOAP:一种数据交换协议规范,基于XML格式,SOAP将信息封装成符合的HTTP协议,任何语言只需请求SOAP便可正常使用)
web service大体上分为5个层次:
1.Http传输信道
2.XML的数据格式
3.SOAP封装格式(传递信息的格式)
4.WSDL的描述方式(如何访问具体的接口)
5.UDDI是一种目录服务,企业可以使用它对webservice进行注册和搜索(管理、分发、查询webservice)
SOAP是最早针对RPC的一种解决方案,早期的SOAP很轻量、支持多种传输协议来传递消息,但随着SOAP在web service中的广泛使用增加了不少规则,SOAP也变得越来越重,使用门槛也随之增高。好比http是一条普通公路,xml是路中间的隔离和两边的护栏,而SOAP则是加装了隔离和护栏的高速公路,车辆能更加快速安全的抵达目的地,但在高速路上行驶要遵守繁多的交通规则。
2.3 Restful接口
Restful是一种软件架构。REST通过HTTP协议定义的通用动词方法(GET、PUT、DELETE、POST) ,以URI对网络资源进行唯一标识,响应端根据请求端的不同需求,通过无状态通信,对其请求的资源进行表述。而满足Rest的约束条件和原则的框架称为RESTful架构。 Rest架构的主要原则:
1.网络上的所有事物都被抽象为资源
2.每个资源都有一个唯一的资源标识符
3.同一个资源具有多种表现形式(xml,json等)
4.对资源的各种操作不会改变资源标识符
5.所有的操作都是无状态的
ex:
在Restful之前的操作: 请求的地址对应具体的业务操作
http://127.0.0.1/user/query/1GET 根据用户id查询用户数据
http://127.0.0.1/user/savePOST 新增用户
http://127.0.0.1/user/updatePOST 修改用户信息
http://127.0.0.1/user/deleteGET/POST 删除用户信息
RESTful用法: 请求
http://127.0.0.1/user/1GET 根据用户id查询用户数据
http://127.0.0.1/userPOST 新增用户
http://127.0.0.1/userPUT 修改用户信息
http://127.0.0.1/userDELETE 删除用户信息