为什么要生撸?
这个问题就好比
我自己已经有老婆了
为什么还要自己做饭 ?
好像这个例子 举的不是很恰当
主要是 为了 理解下 RPC 的一个具体编程模型
和他实现的一些细节
其实就是一个编程模型的 理解 和 实践 过程
https://blog.bywind.cn/articles/2018/11/26/1543222692816.html
本课源码
https://github.com/ibywind/dubbo-learn
Dubbo教程-04-1-RPC框架介绍
Dubbo教程-04-2-生撸一个RPC框架V1.0
Dubbo教程-04-3-生撸一个RPC框架V2.0
代码给我看看
(公众号看代码太丑了,去我的个人博客网站看吧)
基于netty框架
我们之前 学过netty框架的一个 编程模型
server client
基于事件驱动的模式。
上一个例子我们 把 数据传递到服务器
然后 服务器给我们返回数据
中间通过 netty的网络连接 实现打通
那么我们就会想 是否可以 把 传递过去的数据
变成一个抽象,
然后 服务器端的 数据获取 及处理 编程 具体的 实现类
客户端的 模拟调用
变成面向接口 ?
简单画了个图片给大家理解下
说白了就是 客户端 现在 要利用 service 接口
动态生成代理对象
而动态代理的实现细节中加入 和 网络交互
把 具体的代码实现放到了远程服务器。
远程服务器把结果通过网络返回给客户端
客户端再交由代理对象返回
于是我们感知到的就是
真的返回
看起来很牛逼的样子
不错确实很牛逼
运行我们的程序
首先我们运行我们的服务器端代码
接下来我们运行我们的客户端代码
多线程的哦, 并且我们启动两个客户端
我们正好看下 服务器是否会返回错乱,或者活 客户端是否会错乱
准确的说是 客户端是否会错乱
因为我们的客户端 实际处理代码是 一个线程模型的
我们加了 线程安全的模型哦
好的现在我们看下效果
获取服务端的数据完全没有问题
紧接着我么启动第二个客户端
我们发现他的序号也是从 0 开始
这就实现了不同线程中间互补干扰
以上就是我们 1.0 版本的 一个 远程RPC调用
仿佛不是很过瘾
这种只能给一个 服务了
我们需要的是程序的通用性
可以适配更多
并且在传递 参数 和返回参数的时候
我们不想只有 了
我们需要 这样 就更完美了
这也就是 框架的意义所在的
从1.0 升级到 2.0
还是先贴代码吧
我们来按下第二版的 运行效果吧
还是一样的 运行 服务端
然后
运行我们的 client
我们看下结果
客户端结果 输出
服务端接收参数 输出:
大家如果想要自己实际运行下代码的化
可以去看我的 https://github.com/ibywind/dubbo-learn
希望大家可以先看一遍 代码 然后把 动作记下来
自己去实际 生撸 一个 RPC框架
我学到了什么
说句实在话
这个东西网上例子很多的
我之所以 想自己尝试着写下代码
主要为了 防止自己 被 频繁的 拷贝 粘贴
变成老年痴呆
首先分析 原理
这个东西 就是个 代理模式
另外 熟悉了 netty的编程模型
其实做起来还是很简单的.
这个代码我上传到 https://github.com/ibywind/dubbo-learn
大家可以下载下来继续学习和指正哦
代码给我看看
(公众号看代码太丑了,去我的个人博客网站看吧)
领取专属 10元无门槛券
私享最新 技术干货