简易RPC框架 - 1
简易RPC框架 - 前言
1、前言
Rpc框架想必大家都不陌生,常见的开源RPC框架如Dubbo、gRpc、Thrift等,为啥想到要手动实现一个Rpc框架,主要是本人对网络编程很感兴趣,想通过这个来加强自己对Java以及网络编程的理解,也能体验一下钻研的快乐。
2、基础设计
这个Rpc框架的最初设计大概如下图:
最初是尝试通过NIO去实现的,每个服务对应一个Client,即每个服务绑定一个Channel,然后通过Selector轮巡监听服务端的消息。服务端再这里扮演的是一个消息中转站的角色。显而易见的,这个设计存在着一个致命的问题,服务端怎么去分辨Selector上的每个通道对应的是哪个服务,查了很多资料都没有较好的办法,这个方案就不了了之了(最初测试的时候,我试过直接把服务端发布的服务对象序列化到Redis,但存在一些问题,比如当发布的服务中有不可序列化的属性时,就会出现问题)。
这个方案行不通,之后研究了一下Dubbo服务注册的大概思路,结合掘金里DannyIdea(小林)的Java开发者的RPC实战课 里对服务注册、订阅的讲解,对原本的设计进行了改进。
以下是Dubbo的基本架构图:
以下是现在对于框架的设计思路:
目前通信方式也由最初的NIO换成了Netty,实现自定义协议进行编码解码,解决了黏包半包等问题,后续可以扩展不同的序列化方式。
项目的地址在本人的gitee和github仓库:https://github.com/Hurried1y/rpc-framework/,https://gitee.com/hurried1y/rpc-framework
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Hurried1y!
评论