首页 > 其他分享 >rpc、rmi

rpc、rmi

时间:2023-09-13 09:58:13浏览次数:31  
标签:调用 RPC rpc 存根 rmi 远程 服务端 客户端

参考:https://blog.csdn.net/CAUC_lin/article/details/126721115
RMI、RPC区别:https://blog.csdn.net/bandaoyu/article/details/107351265

RPC

定义

RPC全称为remote procedure call,即远程过程调用。借助RPC可以做到像本地调用一样调用远程服 务,是一种进程间的通信方式 。RPC并不是一个具体的技术,而是指整个网络远程调 用过程。

本地调用与RPC调用

clipbord_1692322931478.png

RPC核心组件

  • 客户端(Client),服务的调用方。
  • 客户端存根(Client Stub),存放服务端的地址消息,再将客户端的请求参数打包成网络消息,然后 通过网络远程发送给服务方。
  • 服务端(Server),真正的服务提供者。
  • 服务端存根(Server Stub),接收客户端发送过来的消息,将消息解包,并调用本地的方法。

RPC过程

clipbord_1692323067497.png

  1. 客户端(client)以本地调用方式(即以接口的方式)调用服务;
  2. 客户端存根(client stub)接收到调用后,负责将方法、参数等组装成能够进行网络传输的消息体 (将消息体对象序列化为二进制);
  3. 客户端通过socket将消息发送到服务端;
  4. 服务端存根( server stub)收到消息后进行解码(将消息对象反序列化);
  5. 服务端存根( server stub)根据解码结果调用本地的服务;
  6. 服务处理
  7. 本地服务执行并将结果返回给服务端存根( server stub);
  8. 服务端存根( server stub)将返回结果打包成消息(将结果消息对象序列化);
  9. 服务端(server)通过socket将消息发送到客户端;
  10. 客户端存根(client stub)接收到结果消息,并进行解码(将结果消息发序列化);
  11. 客户端(client)得到最终结果。
    RPC的目标是要把2、3、4、5、7、8、9、10这些步骤都封装起来。只剩下1、6、11

RMI

定义

Java RMI,即远程方法调用(Remote Method Invocation),一种用于实现远程过程调用(RPCRemote procedure call)的Java API, 能直接传输序列化后的Java对象。它的实现依赖于Java虚拟机,因 此它仅支持从一个JVM到另一个JVM的调用。

RMI过程

clipbord_1692323241022.png

  1. 客户端从远程服务器的注册表中查询并获取远程对象引用。
  2. 桩对象与远程对象具有相同的接口和方法列表,当客户端调用远程对象时,实际上是由相应的桩 对象代理完成的。
  3. 远程引用层在将桩的本地引用转换为服务器上对象的远程引用后,再将调用传递给传输层 (Transport),由传输层通过TCP协议发送调用;
  4. 在服务器端,传输层监听入站连接,它一旦接收到客户端远程调用后,就将这个引用转发给其上层的远程引用层;
  5. 服务器端的远程引用层将客户端发送的远程应用转换为本地虚拟机的引用 后,再将请求传递给骨架(Skeleton);
  6. 读取参数,又将请求传递给服务器,最后由服务 器进行实际的方法调用。
  7. 如果远程方法调用后有返回值,则服务器将这些结果又沿着“骨架->远程引用层->传输层”向下传 递;
  8. 客户端的传输层接收到返回值后,又沿着“传输层->远程引用层->桩”向上传递,然后由桩来反序 列化这些返回值,并将最终的结果传递给客户端程序。

标签:调用,RPC,rpc,存根,rmi,远程,服务端,客户端
From: https://www.cnblogs.com/hasome/p/17698724.html

相关文章

  • grpc报错io.grpc.StatusRuntimeException: UNIMPLEMENTED: Service is unimplemented.
    如果被调用方的服务,proto文件上方定义了package,调用方不可以更改此路径!!!syntax="proto3";packagenucdl_FaceMatch;optionjava_multiple_files=true;optionjava_outer_classname="DLFaceProto";optionjava_package="com.nuctech.uranus.face.grpc"; ......
  • linux NFS报错 无法重启rpcbind
    Failedtoregister(statd,1,tcp6/udp):svc_reg()err:RPC:Remotesystemerror-Noroutetohost 解决方案:net.ipv6.conf.all.disable_ipv6=0net.ipv4.conf.all.accept_redirects=0vi/etc/sysctl.conf==>net.ipv6.conf.all.disable_ipv6=0==>net.ipv4.c......
  • .NET Core(C#)通过SharpCifs访问操作Windows(smb)共享目录方法代码
    .NETCore(C#)通过SharpCifs访问操作Windows(smb)共享目录方法代码本文主要介绍.NETCore中,使用SharpCifs访问windows共享目录或smb协义共享目录,或操作共享文件的方法代码。 1、SharpCifs的安装引用使用Nuget管理工具搜索"SharpCifs"=>找到选择"安装"相关文档:VS(Vis......
  • opatch报补丁时,oui-patch.xml (Permission denied)报错
    前言一套19.19RAC环境,使用opatch工具安装数据库补丁,第一个节点成功安装,但在第二个节点执行opatch命令时报错。主要的错误有提示:/u01/app/oraInventory/ContentsXML/oui-patch.xml(Permissiondenied),具体如下所示。[grid@19crac235074478]$$ORACLE_HOME/OPatch/opatcha......
  • SpringCloud为啥要采用HTTP,不采用RPC
    1、首先SpringCloud开启WEB服务依赖于Tomcat,Tomcat内部采用HTTP协议,开发者编写JSON作为资源传输和响应,可以更加能灵活处理业务数据。2、RPC基于TCP协议,客户端和服务端需要三次握手,四次挥手进行数据传输。TCP是数据传输层,传输协议统一由服务端进行编写,进行二进制传输,依赖序列化和......
  • 关于Kubernetes-v1.23-pod-生命周期-postStart-preStop-terminationGracePeriodSecond
    我们在一个pod的yaml配置文件中,有时会看到,terminationGracePeriodSeconds选项,与containers:同级,一般可以放于spec:下面即可是当pod,变为删除的状态后,会给pod一个宽限期,让pod去执行一些清理或者销毁操作另外还有两个选项,postStart,preStop,这两个是位于lifecycle,属于pod生命周期......
  • 【7.0】基于RabbitMQ实现RPC
    【一】RPC介绍【1】介绍RPC(RemoteProcedureCall)是一种远程过程调用的协议,它允许一个计算机程序通过网络请求调用远程服务器上的一个子程序或函数。基于RabbitMQ实现的RPC可以更加可靠地实现远程过程调用。【2】分布式的系统中使用微服务之间的调用resful的接口rpc调......
  • FAILED: SemanticException Unable to determine if hdfs://localhost.localdomain:90
    问题描述在hive数据库里面,使用select语句对表的数据进行查找,就出现了这个错误:问题解决这怎么说呢?就是说,本来想先放一放,之后再解决,在解决了namenode的问题之后,再次打开hive,执行select语句,发现莫名其妙地好了;本人也很是莫名其妙;......
  • FTP权限问题解析,553 Can't open that file: Permission denied
    FTP权限问题解析,553Can'topenthatfile:Permissiondenied FTP上传文件,提示553Can'topenthatfile:Permissiondenied原因:目录的所属组,所属用户属于root,导致FTP无法上传,修改组和所属用户为www即可chown-fRwww./*chgrp-fRwww./* ......
  • windows vs使用grpc-cpp的坑
    1.通过vcpkg安装protoc和grpc-cpp2.生成proto协议代码:protoc-I..-I.--cpp_out=. test.proto3.生成grpc服务代码:protoc-I..-I.--grpc_out=.--plugin=protoc-gen-grpc=`full_path\grpc_cpp_plugin.exe` test.proto4.创建vs工程,引用生成的代码,引用vcpkg安装的pro......