【web远程调用】远程调用中的rpc 与http

远程调用中的rpc 与http

1. Http实现远程调用

http协议概述

1、特点:
(1)网络传输协议
(2)规定数据传输格式
(3)服务调用和提供方没有技术限定
(4)消息封装臃肿

2、典型代表:
RestFul

3、Java客户端工具:
(1)HttpClient(Apache)
(2)OKHttp
(3)URLConnection(JDK)

4、 实现远程调用流程

image-20231125113813690

2. rpc概述

RPC(Remote Produce Call,远程过程调用)不同于http协议,RPC是一种概念框架

​ 它是一种远程调用程序的技术,它允许程序在不同的地址空间中相互通信,像调用本地函数一样调用远程函数,从而实现分布式应用程序的构建。

​ 在 RPC 中,客户端应用程序发送请求消息到远程服务器,服务器接收请求并执行相应的操作,然后将结果返回给客户端。RPC 可以使用多种通信协议,例如 HTTP/RPC、JSON-RPC、XML-RPC 等,这些协议定义了客户端和服务器之间的通信格式。

​ RPC 技术广泛应用于分布式应用程序的构建,例如微服务架构、大数据处理、网络爬虫等领域。它可以帮助开发者实现高可用性、高性能和松耦合的应用程序,同时也可以提高应用程序的可扩展性和灵活性。

2.1 RPC架构

一个完整的RPC架构里面包含了四个核心的组件,分别是Client 、Server、Client Stub、Server Stub,这个Stub大家可以理解为存根。

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

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

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

  • 服务端存根(Server Stub),接收客户端发送过来的消息,将消息解包,并调用本地的方法。(封装消息)

image-20231125113114930

2.2 RPC的调用过程

image-20231125113511406

(1) 客户端(client)以本地调用方式(即以接口的方式)调用服务;

(2) 客户端存根(client stub)接收到调用后,负责将方法、参数等组装成能够进行网络传输的消息体(将消息体对象序列化为二进制);

(3) 客户端通过sockets将消息发送到服务端;

(4) 服务端存根( server stub)收到消息后进行解码(将消息对象反序列化);

(5) 服务端存根( server stub)根据解码结果调用本地的服务;

(6) 本地服务执行并将结果返回给服务端存根( server stub);

(7) 服务端存根( server stub)将返回结果打包成消息(将结果消息对象序列化);

(8) 服务端(server)通过sockets将消息发送到客户端;

(9) 客户端存根(client stub)接收到结果消息,并进行解码(将结果消息发序列化);

(10) 客户端(client)得到最终结果。

RPC的目标是要把2、3、4、7、8、9这些步骤都封装起来。

2.3 主流rpc框架

目前流行的开源RPC框架还是比较多的。下面重点介绍三种:

(1)gRPC是Google公布的开源软件,基于最新的HTTP2.0协议,并支持常见的众多编程语言。 我们知道HTTP2.0是基于二进制的HTTP协议升级版本,目前各大浏览器都在快马加鞭的加以支持。 这个RPC框架是基于HTTP协议实现的,底层使用到了Netty框架的支持。

(2)Thrift是Facebook的一个开源项目,主要是一个跨语言的服务开发框架。它有一个代码生成器来对它所定义的IDL定义文件自动生成服务代码框架。用户只要在其之前进行二次开发就行,对于底层的RPC通讯等都是透明的。不过这个对于用户来说的话需要学习特定领域语言这个特性,还是有一定成本的。

(3)Dubbo是阿里集团开源的一个极为出名的RPC框架,在很多互联网公司和企业应用中广泛使用。协议和序列化框架都可以插拔是及其鲜明的特色。同样的远程接口是基于Java Interface,并且依托于spring框架方便开发。可以方便的打包成单一文件,独立进程运行,和现在的微服务概念一致。

3. 区别总结

1、RPC要求服务提供方和服务调用方都需要使用相同的技术,要么都hessian,要么都dubbo;而http无需关注语言的实现,只需要遵循rest规范。

2、RPC并没有规定数据传输格式,这个格式可以任意指定,不同的RPC协议,数据格式不一定相同;HTTP规定了网络传输的请求格式、响应格式。

3、Http中还定义了资源定位的路径,RPC中并不需要。

4、RPC需要满足像调用本地服务一样调用远程服务,也就是对调用过程在API层面进行封装;Http协议没有这样的要求,因此请求、响应等细节需要我们自己去实现。

5、优缺点
(1)RPC方式更加透明,对用户更方便。Http方式更灵活,没有规定API和语言,跨语言、跨平台。
(2)RPC方式需要在API层面进行封装,限制了开发的语言环境。
  例如我们通过浏览器访问网站,就是通过Http协议。只不过浏览器把请求封装,发起请求以及接收响应,解析响应的事情都帮我们做了。如果是不通过浏览器,那么这些事情都需要自己去完成。

文章引用

https://blog.csdn.net/qq_16268979/article/details/122872208

做了。如果是不通过浏览器,那么这些事情都需要自己去完成。

文章引用

https://blog.csdn.net/qq_16268979/article/details/122872208

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值