创建 channel 并注册initAndRegister() 完整实现如下:
final ChannelFuture initAndRegister() { Channel channel = null; try { //1. 通过 channelFactory 创建新的 channel channel = channelFactory.newChannel(); //2. 初始化相关属性 init(channel); } catch (Throwable t) { // 省略 } // 省略 return regFuture;}
init 是一个抽象方法,服务端实现如下:
@Overridevoid init(Channel channel) throws Exception { final Map<ChannelOption<?>, Object> options = options0(); //1. 设置 Socket 参数和 NioserverSocketChannel 的 附加属性 synchronized (options) { setChannelOptions(channel, options, logger); } final Map<AttributeKey<?>, Object> attrs = attrs0(); synchronized (attrs) { for (Entry<AttributeKey<?>, Object> e: attrs.entrySet()) { @SuppressWarnings("unchecked") AttributeKey<Object> key = (AttributeKey<Object>) e.getKey(); channel.attr(key).set(e.getValue()); } } // 属性省略 p.addLast(new ChannelInitializer<Channel>() { @Override public void initChannel(final Channel ch) throws Exception { final ChannelPipeline pipeline = ch.pipeline(); //2. 将 AbstractBoostrap 的 Handler 添加到 NioserverSocketChannel 的 pipeline 中 ChannelHandler handler = config.handler(); if (handler != null) { pipeline.addLast(handler); } //3. 将用于服务端注册的 ServerBootstrapAcceptor 添加到 pipeline 中 ch.eventLoop().execute(new Runnable() { @Override public void run() { pipeline.addLast(new ServerBootstrapAcceptor( ch, currentChildGroup, currentChildHandler, currentChildOptions, currentChildAttrs)); } }); } });}
到这里,服务端的监听相关资源已经初始化完毕 。
接下来,需要把 NioserverSocketChannel 注册到 Reactor 线程的多路复用选择器上,然后轮训客户端事件 。
NioserverSocketChannel 简介构造器如下:
public NioServerSocketChannel() { this(newSocket(DEFAULT_SELECTOR_PROVIDER));}
这个就是默认 channel 初始化的构造器,实际调用的是:
private static final SelectorProvider DEFAULT_SELECTOR_PROVIDER = SelectorProvider.provider();private static ServerSocketChannel newSocket(SelectorProvider provider) { return provider.openServerSocketChannel();}
推荐阅读
- Netty 实战:如何实现文件服务器?
- Netty 实战:如何实现 HTTP 服务器?
- 什么是2021年最佳的后端开发框架
- 如何实现几百台SIP终端实现自动化部署
- 如何在 Linux 终端查看图像
- 浅谈linux下基于UDP服务的负载均衡方法
- 粽子是端午节的必备食物据说在春秋时期 关于端午粽子的由来
- 端午节五彩线的颜色 端午节绑五色线的意义
- 驱五毒是什么节日 端午节的五毒有哪些
- 课后服务申请理由怎么写?