当前位置: 代码迷 >> 综合 >> RPC 和 HTTP
  详细解决方案

RPC 和 HTTP

热度:2   发布时间:2024-02-20 04:35:15.0
RPC 和 HTTP
rpc 字面意思就是远程过程调用,只是对不同应用间相互调用的一种描述, 一种思想。具体怎么调用?实现方式可以是最直接的 tcp 通信,也可以是 http 方式,在很多的消息中间件的技术书籍里,甚至还有使用消息中间件来实现 RPC 调用的,我们知道的 dubbo 是基于 tcp 通信的, gRPC 是 Google 公布的开源软件, 基于最新的 HTTP2.0 协议,底层使用到了 Netty 框架的支持。所以总结来说, rpc 和 http 是完全两个不同层级的东西,他们之间并没有什么可比性。
实现 RPC 框架

 

实现 RPC 框架需要解决的那些问题
代理问题
代理本质上是要解决什么问题?要解决的是被调用的服务本质上是远程的 服务,但是调用者不知道也不关心,调用者只要结果,具体的事情由代理的那个 对象来负责这件事。既然是远程代理,当然是要用代理模式了。 代理(Proxy) 是一种设计模式 , 即通过代理对象访问目标对象 . 这样做的好处是 : 可以在目标对象实现的基础上, 增强额外的功能操作 , 即扩展目标对象的功能。那 我们这里额外的功能操作是干什么,通过网络访问远程服务。 jdk 的代理有两种实现方式:静态代理和动态代理。
序列化问题
序列化问题在计算机里具体是什么?我们的方法调用,有方法名,方法参数, 这些可能是字符串,可能是我们自己定义的 java 的类,但是在网络上传输或者 保存在硬盘的时候,网络或者硬盘并不认得什么字符串或者 javabean ,它只认得 二进制的 01 串,怎么办?要进行序列化,网络传输后要进行实际调用,就要把 二进制的 01 串变回我们实际的 java 的类,这个叫反序列化。 java 里已经为我们 提供了相关的机制 Serializable 。
通信问题
我们在用序列化把东西变成了可以在网络上传输的二进制的 01 串,但具体 如何通过网络传输?使用 JDK 为我们提供的 BIO 。
登记的服务实例化
登记的服务有可能在我们的系统中就是一个名字,怎么变成实际执行的对象 实例,当然是使用反射机制。
反射机制是什么?
反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性 和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获 取的信息以及动态调用对象的方法的功能称为 java 语言的反射机制。
反射机制能做什么
反射机制主要提供了以下功能:
?在运行时判断任意一个对象所属的类;
?在运行时构造任意一个类的对象;
?在运行时判断任意一个类所具有的成员变量和方法;
?在运行时调用任意一个对象的方法;
?生成动态代理
  相关解决方案