【Java IO详解4】Netty实践

ByteBuf回顾

ByteBuf

协议 nagle合并包
应用层 包大于套接字缓冲区
网络层 tcp分片 帧
路由器,硬件设备等等

  • 编码器

  • 解码器

netty基于ChannelInboudHandlerAdater和ChannelOutboudHanlderAdapter实现了一些编解码抽象类,我们在使用的过程中就只要关注编解码的业务实现。
MessageToMessageDecoder:把某种对象解码成另外一种对象。泛型I对应的是第一个Message类型。
ByteToMessageDecoder:把ByteBuf解码成某一种对象。
MessageToMessageEncoder:把某种对象编码成另一种对象。泛型I对应的是第一个Message类型。
MessageToByteEncoder:把某对象编码成另一种对象。泛型I对应的是第一个Message类型。

RPC框架实现

图片

需要使用到的技术:
1、动态代理
通过java Proxy技术拿到代理对象,invocationHandler实现数据协议包装和通讯。
2、序列化、反序列化
3、网络通讯
基于netty的客户端和服务端进行通讯可以获得很好的IO性能
4、反射
根据客户端请求参数通过反射技术实现服务端对应实例的方法调用

使用netty实现客户端发送需要注意的点
通过Netty的channel调用写数据writeAndFlush 写的事件以及收到响应之后的channelRead事件都是会异步执行,所以需要注意线程协作的问题。可以使用countdowlacth来实现主线程等待channelread执行完之后才去获取收到的响应对象。

图片

图片