RPC 和 HTTP
Posted 笨鸟起飞了
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RPC 和 HTTP相关的知识,希望对你有一定的参考价值。
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 语言的反射机制。
反射机制能做什么
反射机制主要提供了以下功能:
•在运行时判断任意一个对象所属的类;
•在运行时构造任意一个类的对象;
•在运行时判断任意一个类所具有的成员变量和方法;
•在运行时调用任意一个对象的方法;
•生成动态代理
以上是关于RPC 和 HTTP的主要内容,如果未能解决你的问题,请参考以下文章
HTTPHTTP1.0HTTP1.1HTTP2.0HTTPS