首页 > 其他分享 >RPC和RESTFul

RPC和RESTFul

时间:2023-01-30 16:22:37浏览次数:40  
标签:调用 Server RPC Client 序列化 RESTFul 客户端

RPC

RPC 主要是基于 TCP/IP 协议的,属于传输层。

      RPC (Remote Procedure Call),远程过程调用,就是从一台机器(客户端)上通过参数传递的方式调用另一台机器(服务器)上的一个函数或方法(可以统称为服务)并得到返回的结果。

      RPC 在使用形式上像调用本地函数(或方法)一样去调用远程的函数(或方法)。通常的调用过程是把函数序列化,远端收到后,再把函数反序列化,完成函数调用。

一个完整的 RPC 的架构应该包含以下几个组件:

客户端(Client):服务的调用方。

服务端(Server):真正的服务提供者。

Client stub:存放服务端的地址消息,再将客户端的请求参数打包成网络消息,然后通过网络远程发送给服务方。

Server stub:接收客户端发送过来的消息,将消息解包,并调用本地的方法。

一个完整的 RPC 过程:

RPC 采用 Client-Server 结构,通过 request-response 消息模式实现。

      在实际开发的情况下,RPC 很少用到 http 协议来进行数据传输,毕竟只是想传输一下数据而已,何必动用到一个文本传输的应用层协议呢。为什么不直接使用二进制传输?比如直接用 Java 的 Socket 协议进行传输?

      不管用何种协议进行数据传输,一个完整的 RPC 过程,都可以用下面这张图来描述:
image

1、Client 是服务调用方,Server 是服务提供者。

2、左边的 Client 里的 Application 就是一个真正的调用者,先去调用 Client Stub 这个代理对象,其实内部是通过 RPC 方式来进行远程调用的代理对象,这一步主要是来传递参数。

3、至于 Client Runtime Library,则是实现远程调用的工具包,比如 jdk 的 Socket。最后通过底层网络实现实现数据的传输。

4、客户端本地操作系统将消息从客户端机器发送到服务端机器。

5、服务端操作系统接收到数据包传递给 Server Stub。

6、Server Stub 解组消息为参数。

7、Server Stub 再调用服务端的函数(或方法),得到执行结果之后以反方向的相同的步骤响应给客户端,至此就完成了一次 RPC 调用。

      在这个过程中最重要的就是 序列化 和 反序列化。因为数据传输的数据包必须是二进制的,直接丢一个 Java 对象过去,人家可不认识,必须把 Java 对象序列化为二进制格式,传给 Server端,Server 端接收到之后,再反序列化为 Java 对象。

RESTFul

REST API 是基于 HTTP 协议来传输数据的,属于应用层。

      restful 是一种网络应用程序的设计风格和开发方式,基于 http 实现,可以使用 xml 格式定义或 json 格式定义。restful 适用于移动互联网厂商作为业务使能接口的场景,实现第三方 ott 调用移动网络资源的功能,动作类型为查询、新增、变更和删除所调用的资源。

REST 充分利用 HTTP 自身的 GET、POST、PUT、DELETE 的方法实现接口的统一化,比如对一个资源进行 CURD 的操作,如下所示:

GET     url/user    获取所有用户 
POST    url/user    新增/修改用户信息
PUT     url/user    修改用户信息
DELETE  url/user    删除用户信息

标签:调用,Server,RPC,Client,序列化,RESTFul,客户端
From: https://www.cnblogs.com/bran-new/p/17041642.html

相关文章

  • Swagger测试Restful API
    swagger出现背景我们构建RestfulAPI的目的通常都是由于多终端的原因,这些终端会共用很多底层业务逻辑,因此我们会抽象出这样一层来同时服务于多个移动端或者Web前端,不同端由......
  • 《RPC实战与核心原理》学习笔记Day12
    15|熔断限流:业务如何实现自我保护?为什么我们的服务需要自我保护?RPC是解决分布式系统通信问题的一大利器,它会面临高并发的场景,这意味着我们提供服务的每个服务节点都有......
  • 《RPC实战与核心原理》学习笔记Day11
    13|优雅关闭:如何避免服务停机带来的业务损失?我们在RPC架构下,需要考虑当服务重启时,如何做到让调用方系统不出问题。当服务提供方要上线时,一般是通过部署系统完成实例重......
  • 第五节 使用ISM Web组态软件使用RESTFul采集第三方设备
    文章目录​​前言​​​​一、RESTFul是什么?​​​​1.RESTFul数据格式​​​​1.请求接口地址​​​​二、使用步骤​​​​1.建立RESTFul设备模型​​​​2.添加RESTFul数......
  • GRPC与JSON-RPC区别
      GRPC与JSON-RPC都是rpc的一种。 一.RPCRPC是什么RPC(RemoteProcedureCall)指的是远程过程调用,简单的说,RPC就是从一台机器上通过参数传递的方式调用另一台......
  • 修改Nuget包路径解决grpc编译错误
    今天在写一个程序的时候,准备使用grpc,然而,然而使用自带的示例编译的时候却编译出错,错误提示如下:--grpc_out:protoc-gen-grpc:Thesystemcannotfindthepathspecified......
  • gRPC介绍(以Java为例)
    1.简介1.1gRPC的起源RPC是RemoteProcedureCall的简称,中文叫远程过程调用。用于解决分布式系统中服务之间的调用问题。通俗地讲,就是开发者能够像调用本地方法一样调用......
  • spring boot——请求与参数校验—— @PathVariable 注解——restful风格
     根据请求方式,去决定使用哪种方法      同一种请求方式,也可以通过参数的不同,再决定使用哪种方式 get  localhost:8080/getget  localhost:8080/ge......
  • 《RPC实战与核心原理》学习笔记Day10
    11|负载均衡:节点负载差距这么大,为什么收到的流量还一样?什么是负载均衡?当我们的一个服务节点无法支撑现有的访问量时,我们会部署多个节点,组成一个集群,然后通过负载均衡,......
  • SpringMVC学习笔记 - 第一章 - 工作流程、Bean加载控制、请求与响应(参数接收与内容返
    【前置内容】Spring学习笔记全系列传送门:Spring学习笔记-第一章-IoC(控制反转)、IoC容器、Bean的实例化与生命周期、DI(依赖注入)Spring学习笔记-第二章-注解......