rpc 是远程方法调用,其实质就分布式进程间通信(ip/port),底层是TCP/IP(socket)通信
- rpc客户端通过代理静态方法a,获取到接口实现类的代理对象,通过代理对象调用方法获取数据;
- rpc客户端通过代理静态方法a,底层将接口类、方法名、参数类型、参数序列化后传输到Server端;
- 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周左右编写、校对
文章最后,给大家推荐一些受欢迎的技术博客链接:
- Hadoop相关技术博客链接
- Spark 核心技术链接
- JAVA相关的深度技术博客链接
- 超全干货--Flink思维导图,花了3周左右编写、校对
- 深入JAVA 的JVM核心原理解决线上各种故障【附案例】
- 请谈谈你对volatile的理解?--最近小李子与面试官的一场“硬核较量”
- 聊聊RPC通信,经常被问到的一道面试题。源码+笔记,包懂
欢迎扫描下方的二维码或 搜索 公众号“10点进修”,我们会有更多、且及时的资料推送给您,欢迎多多交流!
评论记录:
回复评论: