netty中的设计模式
所属分类 netty
浏览量 79
观察者模式 事件的监听和通知机制
工厂模式 io.netty.channel.ReflectiveChannelFactory 根据 channelClass 创建 channel
策略模式 xxxStrategy
装饰者模式 扩展 ByteBuf 功能 WrappedByteBuf
责任链模式 ChannelPipeline xxxFilter
单例模式
构建者模式 Bootstrap 通过构建者模式来设置各种参数
模板方法模式 服务端和客户端代码模板 , ByteToMessageDecoder 抽象方法 decode , 子类继承父类,覆写父类的抽象方法
迭代器模式 ChannelPipeline 接口继承 Iterable , CompositeByteBuf
适配器模式 ChannelInboundHandlerAdapter
Reactor 模式 使用 Reactor 模式来管理多个连接和事件,通过一个主线程监听事件并分发给相应的处理线程
通过装饰者模式,在不改变 ByteBuf 原有接口的情况下,为其添加额外的功能,如内存泄漏检测、释放等
final class DefaultSelectStrategy implements SelectStrategy {
static final SelectStrategy INSTANCE = new DefaultSelectStrategy();
private DefaultSelectStrategy() { }
@Override
public int calculateStrategy(IntSupplier selectSupplier, boolean hasTasks) throws Exception {
// 是否有任务 ,有就不阻塞 ,否则就阻塞
return hasTasks ? selectSupplier.get() : SelectStrategy.SELECT;
}
}
EventLoopGroup bossGrpup = new NioEventLoopGroup(1);
EventLoopGroup wrokerGrpup = new NioEventLoopGroup();
ServerBootstrap bootstrap = new ServerBootstrap();
bootstrap.group(bossGrpup,wrokerGrpup)
// ReflectiveChannelFactory 根据 channelClass 创建 channel
.channel(NioServerSocketChannel.class)
// 模板 实现不同的 handler
.childHandler(new ChannelInitializer< SocketChannel>() {
@Override
protected void initChannel(SocketChannel ch) throws Exception {
ch.pipeline().addLast(new LoggingHandler());
}
});
ChannelFuture f = bootstrap.bind(8888).sync();
f.channel().closeFuture().sync();
io.netty.channel.DefaultChannelPipeline#DefaultChannelPipeline
protected DefaultChannelPipeline(Channel channel) {
this.channel = ObjectUtil.checkNotNull(channel, "channel");
succeededFuture = new SucceededChannelFuture(channel, null);
voidPromise = new VoidChannelPromise(channel, true);
tail = new TailContext(this);
head = new HeadContext(this);
head.next = tail;
tail.prev = head;
}
io.netty.util.concurrent.DefaultEventExecutorChooserFactory
public final class DefaultEventExecutorChooserFactory implements EventExecutorChooserFactory {
// 单例模式
public static final DefaultEventExecutorChooserFactory INSTANCE = new DefaultEventExecutorChooserFactory();
private DefaultEventExecutorChooserFactory() { }
// 策略模式
public EventExecutorChooser newChooser(EventExecutor[] executors) {
if (isPowerOfTwo(executors.length)) {
return new PowerOfTowEventExecutorChooser(executors);
} else {
return new GenericEventExecutorChooser(executors);
}
}
io.netty.handler.codec.ByteToMessageDecoder#decode
// 抽象方法 子类实现
protected abstract void decode(ChannelHandlerContext ctx, ByteBuf in, List< Object> out) throws Exception;
io.netty.handler.codec.ByteToMessageDecoder#callDecode
调用 decode 方法
CompositeByteBuf 是一个实现了 ByteBuf 接口的类,它使用组合的方式来管理多个 ByteBuf 对象。
CompositeByteBuf 本身并不是迭代器模式的一部分,但它在内部使用了一个迭代器来遍历和管理组成它的多个 ByteBuf 实例
CompositeByteBuf 的特点:
组合多个 ByteBuf:CompositeByteBuf 可以包含多个 ByteBuf 对象,这些对象可以是任何实现了 ByteBuf 接口的实例。
视图整合:对于外部使用者来说,CompositeByteBuf 表现得就像一个单一的 ByteBuf,尽管它内部是由多个部分组成的。
动态调整:可以动态地向 CompositeByteBuf 中添加或删除 ByteBuf,就像在一个大的缓冲区中操作一样。
上一篇
下一篇
netty VS mina
热锅冷油,炒菜不粘锅的科学原理
netty Event Handler 和 Pipeline
Java类命名建议
中证A500指数
JDK future 与 netty future promise 实例