• 远程调用的几种方式


             在分布式服务框架中。最基础的问题就是远程服务是怎么通讯的。首先来看看计算机系统网络通信的基本原理。网络通信须要做的就是将流从一台计算机传输到另外一台计算 机,基于传输协议和网络IO来实现。当中传输协议有 tcpudp等等,tcpudp都是在基于Socket概念上为某类应用场景而扩展出的传输协议。网络IO。主要有bio nioaio三种方式,全部的分布式应用通讯都基于这个原理而实现,仅仅是为了应用的易用。各种语言通常都会提供一些更为贴近应用易用的应用层协议。在java领域中知名的有:RMIXML-RPCBinary-RPCSOAPCORBAJMS等。

    Java领域中有非常多可实现远程通讯的技术。比如:RMIMINAESB BurlapHessianSOAPEJBJMS 等,这些技术都是在协议基础上实现的。那么我们主要讨论一下各个协议。


    RMI

         RMI是个典型的为java定制的远程通信协议, 我们都知道,在single vm中,我们能够通过直接调用java object instance来实现通信,那么在远程通信时,假设也能依照这样的方式当然是最好了。这样的远程通信的机制成为RPCRemoteProcedure Call),RMI正是朝着这个目标而诞生的。

         传输的标准格式是Java Object Stream;基于Java串行化机制将请求的Java Object信息转化为流。传输协议是Socket

     

    XML-RPC

          XML-RPC也是一种和RMI类似的远程调用的协议,它和RMI的不同之处在于它以标准的xml格式来定义请求的信息(请求的对象、方法、參数 ),这种优点是在跨语言通讯的时候也能够使用。所以RMIRPC的差别之中的一个是RPC是跨语言的

          传输的标准格式是XML。将XML转化为流。传输协议是HTTP

    Binary-RPC

           Binary-RPCXML-RPC是差点儿相同,不同之处仅在于传输的标准格式由XML转为了二进制的格式。

           传输的标准格式是二进制文件。将二进制文件转化为传输的流。传输协议是HTTP

     

    SOAP

            SOAPSimpleObject Access Protocol),是一个用于分布式环境的、轻量级的、基于XML进行信息交换的通信协议,能够觉得SOAPXML RPC的高级版。两者的原理全然同样。都是http+XML,不同的仅在于两者定义的XML规范不同。SOAP也是Webservice採用的服务调用协 议标准。

     

    CORBA

          Common Object Request BrokerArchitecture(公用对象请求代理[调度]程序体系结构),是一组用来定义“分布式对象系统”的标准,由OMG(Object Menagement Group)作为发起和标准制定单位。CORBA的目的是定义一套协议,符合这个协议的对象能够互相交互,不论它们是用什么样的语言写的。不论它们执行于 什么样的机器和操作系统。CORBA是个类似于SOA的体系架构。涵盖可选的远程通信协议,但其本身不能列入通信协议。

     

    JMS

          JMS。是实现java领域远程通信的一种手段和方法。基于JMS实现远程通信时和RPC是不同的。尽管能够做到RPC的效果,但由于不是从协议 级别定义的。因此我们不觉得JMS是个RPC协议,但它确实是个远程通信协议,在其它的语言体系中也存在着类似JMS的东西,能够统一的将这类机制称为消 息机制。而消息机制呢,一般是高并发、分布式领域推荐的一种通信机制,这里的主要一个问题是容错。JMS注重的是消息交换,RMI注重的是对象方法调用,所以目的不同。JMS大多时候是异步的松耦合,RMI大多时候是同步的紧耦合。

          JMS规定的传输格式是Message,将參数信息放入Message中,传输协议不限。基于JMS也是经常使用的实现远程异步调用的方法之中的一个。

  • 相关阅读:
    如何解决IOS 下固定定位fixed 失效问题?
    fixed定位按钮在底部,键盘弹起,按钮被顶上去
    js对象和jquery对象相互转换
    # js中substr、substring、indexOf、lastIndexOf的用法
    在新页面中返回到前一页浏览的历史位置
    vue-cli构建的项目中axios的请求方式及跨域处理
    搭建基于Express框架运行环境 及其启动方式
    微信小程序Page中data数据操作和函数调用
    linux的一些基本操作
    JavaScript对象
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5184382.html
Copyright © 2020-2023  润新知