# EuporiaRpc **Repository Path**: beyond_forever/EuporiaRpc ## Basic Information - **Project Name**: EuporiaRpc - **Description**: No description available - **Primary Language**: Java - **License**: MulanPSL-2.0 - **Default Branch**: revision - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2021-12-08 - **Last Updated**: 2022-08-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # EuporiaRpc ### 1.项目介绍 ##### 1.1 RPC基本介绍: RPC(Romote Procedure Call)远程过程调用。它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。简言之,RPC使得程序能够像访问本地系统资源一样,去访问远端系统资源。 ![rpc服务的基本过程](https://gitee.com/beyond_forever/typora-image/raw/master/img/202203142123526.png) -- 上图来自网络 ##### 1.2 项目名称寓意: RPC让人访问远程服务资源就像访问本地资源一样,而不需过多的关注底层细节。人们享受服务联网带来便利的背后,依靠的是一套科研人员、开发人员、运维人员等各种人员相互协作的体系,它们各司其职,才成就了这一切。**"哪有什么岁月静好,不过是有人替你负重前"**。 ![img](https://gitee.com/beyond_forever/typora-image/raw/master/img/202203142137121.png) 想到这,不免让我想起一首歌-《Euporia》 田柾国,里面的歌词让人印象深刻: Euphoria - 田柾国 Euphoria Euphoria take my hands now **You are the cause of my Euphoria** Euporia本意是兴奋,通常指持续时间较短的极度愉快的心情;极度兴奋的情绪。其中”**You are the cause of my Euphoria**“ --我的欢喜皆由你这句又较为契合**“哪有什么岁月静好,不过是有人替你负重前”**这句话,因而决定将此项目命名为EuporiaRPC.(像Eureka真的是一个很好的英文单词,而且又比较符合Eureka作为注册中心的立意。) ### 2.项目功能 1. **注册中心**:分别使用Zookeeper、redis作为注册中心,可以自己选择不同的注册中心 2. **网络传输**:Netty/BIO。使用 Netty(基于 NIO)替代 BIO 实现网络传输; 3. **序列化方法**:Java自带序列化框架/Kyro/Hessian/Prostuff 4. **动态代理**:JDK自带代理模式/CGLIB 5. **服务治理**:实现随机负载均衡算法、轮询负载均衡、一致性负载均衡算法 6. **自定义协议**: ![](https://gitee.com/beyond_forever/typora-image/raw/master/img/202203302241099.png) **魔法数** : 通常是 4 个字节。这个魔数主要是为了筛选来到服务端的数据包,有了这个魔数之后,服务端首先取出前面四个字节进行比对,能够在第一时间识别出这个数据包并非是遵循自定义协议的,也就是无效数据包,为了安全考虑可以直接关闭连接以节省资源。 **版本信息**: RPC的版本信息 目前v1 **总长度:**运行时计算出来。如果消息类型不是REQUEST_TYPE也不是RESPONSE_TYPE,则fullLength= head length + body length **消息类型:** | 名称 | 代码 | | ----------------------- | ---- | | REQUEST_TYPE | 0x01 | | RESPONSE_TYPE | 0x02 | | HEARTBEAT_REQUEST_TYPE | 0x03 | | HEARTBEAT_RESPONSE_TYPE | 0x04 | **序列化器类型**: | 名称 | 代码 | | ---------- | ---- | | KRYO | 0x01 | | PROTOSTUFF | 0x02 | | HESSIAN | 0x03 | | JDK | 0x04 | **压缩类型**: | 名称 | 代码 | | ---- | ---- | | GZIP | 0x01 | | ZIP | 0x02 | ### 3.项目待完成项 - [ ] 1.优化代码,减少代码冗余,比如采用设计模式优化代码 - [ ] 2.增加的日志链路追踪(为了方便调试,在代码中增加了许多日志信息,) - [ ] 3.手动实现一个注册中心(比如基于KV存储的小型数据库) - [ ] 4.服务监控中心