服务端创建连接并响应请求
客户端与服务端通讯必须先创建连接。
在前文介绍服务端初始化的时候说道初始化的时候会向boss
线程注册一个OP_ACCEPT
事件。客户端请求链接时即会触发此事件。当boss线程池中的NioEventLoop
在循环的时候检测到此事件时,会触发NioMessageUnsafe.read
方法。
1 | public void read() { |
和Client
端的不同之处即在于doReadMessages
方法。此处调用的是NioServerSocketChannel.doReadMessage
。
其调用的是原生ServerSocketChannel.accept
方法来获取一个SocektChannel
然后封装在NioSocetChannel
中,并将其传递到ServerBootstrapAcceptor:
1 | public void channelRead(ChannelHandlerContext ctx, Object msg) { |
首先,将初始化时配置的childHandler
加到Channel
的pipeline
中,然后将Channel
注册到某个 Reactor线程 上,然后开始监听OP_READ
读事件。
此后与客户端的通讯工作即会在Reactor线程中进行,其过程与Client
中一致,因此这里不再复述。