RPCg 是一款基于 Go 标准库实现的迷你 RPC 框架,旨在帮助我们更好的理解 RPC 框架的工作机制,模块抽象良好,易扩展和学习。
首先启动 registry(左上角),随后启动两个 server 连接到注册中心,随后启动 client,从注册中心提供的服务器列表中随机选择了一个服务器进行调用返回,并正确收到消息。
你可以看到每当服务端上线后,注册中心都会更新当前服务端列表,并且服务端定时还会向注册中心发送心跳数据维持与注册中心的连接。你也可以自己下载下来运行这个程序 :)
乱码是因为 Git Bash 的问题,如果你换个终端,比如 Cmder,PowerShell 7之类的就没事了。
这个迷你框架是为了学习RPC框架而开发的,我也会附带上对应的开发教程,无脑重复造轮子的工作 duck 不必,但是前人为我们推导出了公式,我们为了更好地理解再去实现一遍也未尝不可,别人写的再神奇让你拍手叫绝,也终究是别人的,上手尝试才是入门的第一步,我相信你会有不一样的理解。
另外,如果你有问题,欢迎随时与我交流。
当然如果你觉得对你有帮助,给我点一个 Star 就是最大的鼓励。
好了,话就说这么多,下面上正文。
目前大致的模块划分如上图,详情解析请移步 RPCg开发教程,在这个教程里我会带着你一步一步解析 RPC 框架的大致运作原理,最后直到手写一个你自己的简易 RPC 框架!后续相关教程更新都会在博客上,这里只展示当前功能。
- 支持 TCP,UDP,Unix,HTTP 网络传输方式。
- 实现了一种序列化方式 gob。
- 实现了四种负载均衡算法,随机,顺序选择,平滑加权轮询,一致性哈希策略。
- 实现了自定义的注册中心,提供心跳机制维持连接。
- 实现了自定义的数据格式。
- 接口抽象良好,各模块耦合度低,模块内易扩展,网络传输、序列化器、负载均衡算法可灵活配置。
-
定制生成完整 RPC 代码的代码生成插件
-
负载均衡策略:基于下游服务器时延选择(ICMP)
-
增加对 protobuf 格式的支持
-
提供一种压缩方式(gzip)