营口pc网站开发爱站网官网关键词
- 作者: 五速梦信息网
- 时间: 2026年04月20日 06:59
当前位置: 首页 > news >正文
营口pc网站开发,爱站网官网关键词,企业查询显示利好什么意思,phpcms wap网站搭建Netty作为一个高性能的网络通信框架#xff0c;里面有很多优秀的代码值得我们学习#xff0c;今天我们一起看下Netty中用到了哪些设计模式。 一、单例模式 Netty通过 NioEventLoop 将通道注册到选择器#xff0c;并在事件循环中多路复用它们。其中提供了一个选择策略对象 S…Netty作为一个高性能的网络通信框架里面有很多优秀的代码值得我们学习今天我们一起看下Netty中用到了哪些设计模式。 一、单例模式 Netty通过 NioEventLoop 将通道注册到选择器并在事件循环中多路复用它们。其中提供了一个选择策略对象 SelectStrategy它只有一个默认实现DefaultSelectStrategy。 /*** Default select strategy./ final class DefaultSelectStrategy implements SelectStrategy {static final SelectStrategy INSTANCE new DefaultSelectStrategy();private DefaultSelectStrategy() { }Overridepublic int calculateStrategy(IntSupplier selectSupplier, boolean hasTasks) throws Exception {return hasTasks ? selectSupplier.get() : SelectStrategy.SELECT;} } 还有 ReadTimeoutException 和 WriteTimeoutException /** A {link TimeoutException} raised by {link ReadTimeoutHandler} when no data* was read within a certain period of time./ public final class ReadTimeoutException extends TimeoutException {private static final long serialVersionUID 169287984113283421L;public static final ReadTimeoutException INSTANCE PlatformDependent.javaVersion() 7 ?new ReadTimeoutException(true) : new ReadTimeoutException();ReadTimeoutException() { }private ReadTimeoutException(boolean shared) {super(shared);} } /** A {link TimeoutException} raised by {link WriteTimeoutHandler} when a write operation* cannot finish in a certain period of time./ public final class WriteTimeoutException extends TimeoutException {private static final long serialVersionUID -144786655770296065L;public static final WriteTimeoutException INSTANCE PlatformDependent.javaVersion() 7 ?new WriteTimeoutException(true) : new WriteTimeoutException();private WriteTimeoutException() { }private WriteTimeoutException(boolean shared) {super(shared);} } 二、工厂模式 工厂模式是非常常见的一种模式Netty中也使用到比如 上面提到的选择策略工厂 DefaultSelectStrategyFactory /** Factory which uses the default select strategy./ public final class DefaultSelectStrategyFactory implements SelectStrategyFactory {public static final SelectStrategyFactory INSTANCE new DefaultSelectStrategyFactory();private DefaultSelectStrategyFactory() { }Overridepublic SelectStrategy newSelectStrategy() {return DefaultSelectStrategy.INSTANCE;} } 三、策略模式 在默认的事件执行选择工厂 DefaultEventExecutorChooserFactory 的 newChooser 方法中根据数组参数的长度是否是2的幂 来选择不同的 EventExecutorChooser。两种方式都是简单的轮询方式只是方式不同。 Overridepublic EventExecutorChooser newChooser(EventExecutor[] executors) {if (isPowerOfTwo(executors.length)) {return new PowerOfTwoEventExecutorChooser(executors);} else {return new GenericEventExecutorChooser(executors);}} private static final class PowerOfTwoEventExecutorChooser implements EventExecutorChooser {private final AtomicInteger idx new AtomicInteger();private final EventExecutor[] executors;PowerOfTwoEventExecutorChooser(EventExecutor[] executors) {this.executors executors;}Overridepublic EventExecutor next() {return executors[idx.getAndIncrement() executors.length - 1];}}private static final class GenericEventExecutorChooser implements EventExecutorChooser {// Use a long counter to avoid non-round-robin behaviour at the 32-bit overflow boundary.// The 64-bit long solves this by placing the overflow so far into the future, that no system// will encounter this in practice.private final AtomicLong idx new AtomicLong();private final EventExecutor[] executors;GenericEventExecutorChooser(EventExecutor[] executors) {this.executors executors;}Overridepublic EventExecutor next() {return executors[(int) Math.abs(idx.getAndIncrement() % executors.length)];}} 四、装饰者模式 WrappedByteBuf 就是对 ByteBuf的装饰来实现对它的增加。 class WrappedByteBuf extends ByteBuf {protected final ByteBuf buf;protected WrappedByteBuf(ByteBuf buf) {if (buf null) {throw new NullPointerException(buf);}this.buf buf;}…… } 五、责任链模式 ChannelPipeline 就是用到了责任链模式所谓的责任链模式是指它允许多个对象在处理请求时形成一条链每个对象都有机会处理请求将请求沿着链传递直到有一个对象处理它为止。 /** The default {link ChannelPipeline} implementation. It is usually created* by a {link Channel} implementation when the {link Channel} is created./ public class DefaultChannelPipeline implements ChannelPipeline {static final InternalLogger logger InternalLoggerFactory.getInstance(DefaultChannelPipeline.class);private static final String HEAD_NAME generateName0(HeadContext.class);private static final String TAIL_NAME generateName0(TailContext.class);private static final FastThreadLocalMapClass?, String nameCaches new FastThreadLocalMapClass?, String() {Overrideprotected MapClass?, String initialValue() {return new WeakHashMapClass?, String();}};private static final AtomicReferenceFieldUpdaterDefaultChannelPipeline, MessageSizeEstimator.Handle ESTIMATOR AtomicReferenceFieldUpdater.newUpdater(DefaultChannelPipeline.class, MessageSizeEstimator.Handle.class, estimatorHandle);final HeadContext head;final TailContext tail;private final Channel channel;private final ChannelFuture succeededFuture;private final VoidChannelPromise voidPromise;private final boolean touch ResourceLeakDetector.isEnabled();private MapEventExecutorGroup, EventExecutor childExecutors;private volatile MessageSizeEstimator.Handle estimatorHandle;private boolean firstRegistration true;/** This is the head of a linked list that is processed by {link #callHandlerAddedForAllHandlers()} and so process* all the pending {link #callHandlerAdded0(AbstractChannelHandlerContext)}.** We only keep the head because it is expected that the list is used infrequently and its size is small.* Thus full iterations to do insertions is assumed to be a good compromised to saving memory and tail management* complexity./private PendingHandlerCallback pendingHandlerCallbackHead;/** Set to {code true} once the {link AbstractChannel} is registered.Once set to {code true} the value will never* change.*/private boolean registered;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;}
- 上一篇: 盈润企业网站管理系统西安高校网站建设定制网站建设
- 下一篇: 营口品牌网站建设图片动画制作
相关文章
-
盈润企业网站管理系统西安高校网站建设定制网站建设
盈润企业网站管理系统西安高校网站建设定制网站建设
- 技术栈
- 2026年04月20日
-
荧光字体制作网站wordpress怎样美化网页
荧光字体制作网站wordpress怎样美化网页
- 技术栈
- 2026年04月20日
-
鹰潭市网站建设建网站需要什么步骤
鹰潭市网站建设建网站需要什么步骤
- 技术栈
- 2026年04月20日
-
营口品牌网站建设图片动画制作
营口品牌网站建设图片动画制作
- 技术栈
- 2026年04月20日
-
营口网站建设单位公司网站页面设计思路
营口网站建设单位公司网站页面设计思路
- 技术栈
- 2026年04月20日
-
营山网站建设网站后台管理图片
营山网站建设网站后台管理图片
- 技术栈
- 2026年04月20日






