用 Netty 造一个简单的 RPC

本贴最后更新于 210 天前,其中的信息可能已经时过境迁

一、项目结构

hotrpc-common

该子项目主要用于客户端和服务端之间的通信,自定义了一个请求协议,请求格式如下:

header dataLength data
614756773 variable variable

hotrpc-server

hotrpc-client


二、主流程

客户端

  1. 启动 SpringBootApplication
  2. 扫描标有 RPC 注解的类
  3. 注册到 Spring 容器中
    • 注册时使用 JDK 动态代理该类 代理类东西有点多看下面
  4. 从 Spring 容器中获得该类,调用方法

服务端

  1. 实例化 Server 并且启动
  2. 检查 Server 状态,保证不会重复启动
  3. 把 rpc 服务实现类扫描出来然后实例化,缓存在 Map 对象中
  4. 若有请求来临
    • 对请求进行解码
    • 获取到请求体,从而找到对应的 rpc 服务实现类
    • 调用服务实现类
    • 对调用结果进行编码
    • 发送结果给客户端

三、优化点


源码

github

  • Netty

    Netty 是一个基于 NIO 的客户端-服务器编程框架,使用 Netty 可以让你快速、简单地开发出一个可维护、高性能的网络应用,例如实现了某种协议的客户、服务端应用。

    42 引用 • 25 回帖 • 2 关注

赞助商 我要投放

回帖
请输入回帖内容 ...