netty-daxin-3(rpc远程调用)

文章目录

nettyRpc

ObjectEncoder 与 ObjectDecoder

  • ObjectEncoder继承自MessageToByteEncoder<Serializable>,它内部使用ByteBufOutputStream包装ByteBuf对象,然后使用CompactObjectOutputStream包装ByteBufOutputStream,也即:CompactObjectOutputStream--->ByteBufOutputStream--->ByteBuf,然后使用CompactObjectOutputStream将java对象写到ByteBuf中,并且写的过程中,是先写4个字节的占位符,它代表消息内容的长度,等写完了整个java对象的流之后,再把长度写到4个字节的占位符上。
  • ObjectDecoder继承自LengthFieldBasedFrameDecoder,显然,与它对应的编码器写消息的时候,就是按照长度字段来写的,因此解码须继承LengthFieldBasedFrameDecoder,然后拿到对象的字节流后,CompactObjectInputStream--->ByteBufInputStream--->ByteBuf

jdk动态代理回顾

Rpc调用

有几个重要的点:

  1. 最好不要在eventLoop处理解码的ChannelHandler上处理业务,因为eventLoop内部只有1个线程在处理多个channel,如果处理业务的逻辑放在handler里面,相当于其它的channel就会受影响
  2. netty的调用都是异步的,我们需要在客户端发出rpc请求后,阻塞当前rpc调用的线程,然后在得到服务端的响应之后,再去唤醒当前调用rpc的线程。这需要对AQS、ReentrantLock、Condition内部的锁并发等待唤醒了解。

过程简析

服务端
客户端



相关推荐
百锦再10 小时前
Auto.js变成基础知识学习
开发语言·javascript·学习·sqlite·kotlin·android studio·数据库开发
KuaCpp10 小时前
C++新特性学习
c++·学习
Komorebi_999913 小时前
大模型学习day5
学习·大模型
逍遥德14 小时前
AI时代,计算机专业大学生学习指南
java·javascript·人工智能·学习·ai编程
网络与设备以及操作系统学习使用者14 小时前
直连路由优先级最高
运维·网络·学习·华为·智能路由器
逆羽飘扬15 小时前
【AI Infra面试】基础学习汇总篇
人工智能·学习
05候补工程师16 小时前
[线性代数] 判定线性相关性的“降维打击”:从基本定理到速通特殊法
经验分享·笔记·学习·线性代数·考研
太阳上的雨天16 小时前
AI学习ing~
学习·ai·ai编程
麦田里的粮仓16 小时前
文档站点生成器 - Fumadocs
学习
技术小结-李爽17 小时前
【学习】怎样把“提问题”推荐给别人
学习