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
语言的反射机制。
反射机制能做什么
反射机制主要提供了以下功能:
?在运行时判断任意一个对象所属的类;
?在运行时构造任意一个类的对象;
?在运行时判断任意一个类所具有的成员变量和方法;
?在运行时调用任意一个对象的方法;
?生成动态代理