首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

dubbo教程-04-手写一个RPC框架

为什么要生撸?

这个问题就好比

我自己已经有老婆了

为什么还要自己做饭 ?

好像这个例子 举的不是很恰当

主要是 为了 理解下 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

大家可以下载下来继续学习和指正哦

代码给我看看

(公众号看代码太丑了,去我的个人博客网站看吧)

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181201A0J3L800?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券