rpc核心
被面试官问过这样一个问题:“假如要你实现一个rpc框架,客户端和服务端你要考虑哪些东西?”
rpc框架负责屏蔽底层的传输方式(tcp或者udp)、序列化方式(xml/json/二进制)和通信细节,服务调用者可以像调用本地接口一样调用远程服务,而不需要关心底层通信细节和调用过程。
rpc的组件一般有服务注册与发现、负载均衡、序列化/反序列化、编解码、网络传输、线程池、动态代理、连接池等。
服务注册与发现,可以采用Eureka或者Nacos。
自定义协议、编解码
所谓协议,就是通信双方事先商量好规则,服务端知道发送过来的数据将如何解析。
网络传输协议
tcp、udp、http、http2.0
成熟的rpc框架一般会提供四种调用方式,分别是同步阻塞、异步非阻塞、
rpc一般是长连接。
在回调的时候,需要用到上下文管理器
1、客户端生成请求id
2、客户端生成请求上下文,上下文中包含发送时间、回调函数等信息
3、上下文管理器记录请求id与上下文的映射关系
4、将请求id打在请求包里发给服务端
5、服务端将请求id打在响应包里返回
6、客户端根据响应包中的请求id,通过上下文管理器找到原来的上下文
7、从上下文中拿到回调函数
8、执行回调函数。
除了上下文管理器,还有一个超时管理器,用于实现请求包超时的回调处理。
超时管理器会对上下文管理器中的上下文进行扫描,看上下文中请求等待回包是否过长,如果过长,就不再等待回包,直接超时回调,并将上下文从上下文管理器中删掉。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】