视频资源获取失败
你好,我是何小锋。到今天为止,基础篇的知识我们就全部学习完了,接下来我们进入进阶篇。
在基础篇里面,我们讲了 RPC 的通信原理以及 RPC 里各个功能组件的作用,不妨用一段话再次回顾下:“其实 RPC 就是把拦截到的方法参数,转成可以在网络中传输的二进制,并保证在服务提供方能正确地还原出语义,最终实现像调用本地一样地调用远程的目的。”你记住了吗?
那学到这儿,距离实现一个灵活的 RPC 框架其实还是有距离的。知道了各个功能组件只是迈出了第一步,接下来你必须要清楚各个组件之间是怎么完成数据交互的,这也是今天这讲的重点,我们一起搞清楚 RPC 的架构设计。
说起架构设计,我相信你一定不陌生。我理解的架构设计呢,就是从顶层角度出发,厘清各模块组件之间数据交互的流程,让我们对系统有一个整体的宏观认识。我们先看看 RPC 里面都有哪些功能模块。
我们讲过,RPC 本质上就是一个远程调用,那肯定就需要通过网络来传输数据。虽然传输协议可以有多种选择,但考虑到可靠性的话,我们一般默认采用 TCP 协议。为了屏蔽网络传输的复杂性,我们需要封装一个单独的数据传输模块用来收发二进制数据,这个单独模块我们可以叫做传输模块。
用户请求的时候是基于方法调用,方法出入参数都是对象数据,对象是肯定没法直接在网络中传输的,我们需要提前把它转成可传输的二进制,这就是我们说的序列化过程。但只是把方法调用参数的二进制数据传输到服务提供方是不够的,我们需要在方法调用参数的二进制数据后面增加“断句”符号来分隔出不同的请求,在两个“断句”符号中间放的内容就是我们请求的二进制数据,这个过程我们叫做协议封装。

作者回复: 可以参考springboot的Condition实现
作者回复: 很棒!
作者回复: 希望能帮助到你
作者回复: 现在很多开源框架都用到了插件
作者回复: 插件化是一个概念,有很多种实现方式,这种也可以算。
作者回复: jdk我理解更多是标准
作者回复: 是的,可以考虑自己实现一个
作者回复: 很棒
作者回复: 那样插件的意义就不存在了
编辑回复: 你可以看下第6讲