写点什么

第 01 篇: 手写 JavaRPC 框架之思路分析

作者:西魏陶渊明
  • 2022 年 8 月 03 日
  • 本文字数:1532 字

    阅读完需:约 5 分钟

第01篇:手写JavaRPC框架之思路分析

作者: 西魏陶渊明

博客: https://blog.springlearn.cn/


天下代码一大抄, 抄来抄去有提高, 看你会抄不会抄!


一、前言

如果不是因为热爱,我不会这样;如果不是为了,涨点粉丝,我不会这样;如果不是为了几两散碎银子,我更不会这样。


以前的文章开场太过严肃,太过专业。就像大学老师上课,只知道讲课。不知道互动。这样效果太差,写的没意思,读者更是没意思。大数据分析还以为你是抄的,还不给你推荐热门 😭。


不然就改变一下风格吧,从本系列文章开始,小编就要放飞 ✈️ 自我,随心 ❤️ 而动。希望在分享,总结自己掌握的知识点的同时,能给各位客官带来一点小小的收获。小编尽量全力输出干货,如果看完感觉还行的话,希望能多多关注。你的关注,就是我进步的最大动力。如果看完,感觉就这? 可以留言讨论。接受各位看官的批评和意见。共同学习共同进步。

二、目标

本系列文章的总体目标是从零实现一个 RPC 框架,我们将从 TCP 通信协议开始,一步一步实操,将 socket 二进制数据流一步一步变成 Java 可以认识的数据类型,从而最终实现 RPC 远程通信,并可以集成在 Spring 中,同时也可以支持 SpringBoot 的自动化配置。最终我们会将项目发布到全球 Maven 仓库, 让大家都可以下载学习。


本系列文章主要知识点以思维导图的方式,展示在下图=面,内容只会多不会少。干货较多,对于初级的同学可以收藏起来慢慢看。毕竟一口也吃不了一个胖子。但是不能没有信心。


正如小编的口头禅: 写代码和写文章是一样一样的。


天下代码一大抄,抄来抄去有提高,看你会抄不会抄。


三、思路分析

3.1 什么是 RPC 框架

我们在要写 RPC 框架,我们先思考下 RPC 是什么? 白话点就是一个远程通信的工具而已。他可以让开发者像调用本地方法一样,方便的调用远程的方法。


目前市面上的 RPC 框架主要有下面这些


  • dubbo

  • grpc

  • feign


可能对于银行和传统国企可能偏爱国产的 dubbo 框架,可能会涉及到国家安全吧,而对于互联网公司更多的会使用 SpringCloud 的全家桶。那么不管他们使用的其中的哪一款,其实这些框架都是能做到,让开发者像调用本地方法一样实现远程方法的调用的。


可以实现远程调用的呢? 答案当然就是利用 socket 通信了。而 socket 底层通信都是基于 tcp/ip 协议实现的。所以以上这三款的

3.2 通信框架的区别

  • dubbo

  • grpc

  • feign


共同点:


  • 都是基于 tcp/ip 协议来实现通信

  • 都屏蔽底层通信细节,使开发者只用关心自己的业务即可


不同点:


  • grpc 和 feign 都是基于 tcp 协议更上层的 http 协议来实现的

  • dubbo 是基于 tcp 协议上自己重新实现了一套自己的规则,而这个规则就是 dubbo 协议。


dubbo 协议因为是直接基于 tcp 协议定制的,所以可能性能会更加的好。能实现更多的底层的特性,比如说长连接。而其他两款是基于 http 协议来进行封装的,正因为它的这个特性,所以只是 http 客户端都可以进行调用,更适合跨平台,跨语言。因为不管是什么语言,都支持 http 协议。但是他的性能可能就相对没有 dubbo 好,综上所述他们各有胜负。现在主要比的就是看谁的生态比较好,谁的周边扩展更加丰富。

3.3 RPC 底层实现

前面我们说了,RPC 框架是一个,可以让程序猿像调用本地方法一样实现远程方法调用的一个工具。其实这句话就说出了主要的答案。



既然知道了他的大概实现,那么其实思路就有了。我们第一步就是使用 Java 语言来实现底层的通信能力建设,然后在这个基础上进行二次封装,最终通过动态代理的形式,将底层通信的细节给屏蔽起来。如此就能实现一个 RPC 协议了。


思路就是这个思路。



所以本系列文章的第一部分,就是先完成通信层的建设,使用 Java 实现一个通用的底层协议,实现通信能力。



说着很简单,但是实现通信可没有那么简单哦。接下来我们面临一系列网络通信中的难题。比如说 Java 的通信 API 表难用,网络通信中还有黏包拆包等问题。但是没关系,这些坑小编已经踩过了,跟着小编的思路一步一步做。相信事半必能功倍。

发布于: 刚刚阅读数: 3
用户头像

天下代码一大抄,抄来抄去有提高。 2019.06.25 加入

还未添加个人简介

评论

发布
暂无评论
第01篇:手写JavaRPC框架之思路分析_Java_西魏陶渊明_InfoQ写作社区