首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

聊聊RPC通信,经常被问到的一道面试题。源码+笔记,包懂

  • 25-03-07 20:00
  • 3723
  • 10048
blog.csdn.net

rpc 是远程方法调用,其实质就分布式进程间通信(ip/port),底层是TCP/IP(socket)通信

  1. rpc客户端通过代理静态方法a,获取到接口实现类的代理对象,通过代理对象调用方法获取数据;
  2. rpc客户端通过代理静态方法a,底层将接口类、方法名、参数类型、参数序列化后传输到Server端;
  3. Server端收到数据后,通过(从服务注册表找到具体的类)反射获取到接口的具体实现类,调用实现类对应的方法 将数据传输回Client端 主要技术点:动态代理、序列化、反序列化、反射、获取数据、序列化、反序列化、传输、接收数据

    从单从到分布式 -> 分布式通信 -> 最基本:二进制数据传输TCP/IP(高低电平)

源码下载链接:RPC研究,从浅到深,含研究笔记:超级全面,包懂.zip

源码从浅入深逐个讲解:分了好几个版本

源码效果截图:

源码组成:

  • rpc01 是最原始最原始的RPC方式,不够灵活;但是是最基本的通信方式
  • rpc02 增加一个单独的代理Stub,负责网络通信通过id获取user; 代理Stub屏蔽网络细节
  • rpc03 rpc02这种方式,如果方法增加了或者接口变动了,Stub代理都得跟着变,rpc03解决此问题
  •       在rpc03中,Stub提供接口实现类,至于客户端Client调用哪个接口方法,client自己决定
  •       动态代理,动态生成一个接口IUserService实现类 XXXX,
  • rpc04 在rpc03中,只能正常运行findUserById,如果接口增加saveUser就不能正常运行了
  •       在rpc04中,客户端将方法名、参数列表、参数传到server端,所以即便接口名字变更了,都可以兼容
  •       所以服务器端的解析也是跟着修改,不然就不能适配了
  •       服务器端,获取到方法名、参数类型,能过反射拿到方法
  •       但是,还不够完善,因为接收数据还是最原始的方式,一个个拆解
  • rpc05 返回值用Object封装,支持任意类型
  •       这个版本解决客户端接收数据一个个需要拆解问题
  •       接口可以增中新的接口方法,实体类也可以添加新的属性
  •       但是,此版本只能拿到一个接口的实现类
  • rpc06 解决可以多个接口实现类,屏蔽底层通信细节

大数据技术链接:超全干货--Flink思维导图,花了3周左右编写、校对


文章最后,给大家推荐一些受欢迎的技术博客链接:

  1. Hadoop相关技术博客链接
  2. Spark 核心技术链接
  3. JAVA相关的深度技术博客链接
  4. 超全干货--Flink思维导图,花了3周左右编写、校对
  5. 深入JAVA 的JVM核心原理解决线上各种故障【附案例】
  6. 请谈谈你对volatile的理解?--最近小李子与面试官的一场“硬核较量”
  7. 聊聊RPC通信,经常被问到的一道面试题。源码+笔记,包懂

 


欢迎扫描下方的二维码或 搜索 公众号“10点进修”,我们会有更多、且及时的资料推送给您,欢迎多多交流!

                                           

       

注:本文转载自blog.csdn.net的不埋雷的探长的文章"https://blog.csdn.net/weixin_32265569/article/details/107425756"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top