在setSocketOptions方法中,首先将socket配置成非阻塞模式:
其中attachment的结构如下,它可以看做是一个共享的数据结构:
4. Poller线程读请求、生成响应数据、注册WRITE事件
在上面说的setSocketOptions方法中调用Poller线程的register方法注册读事件之后,当READ准备就绪之后,就开始读了。下面代码位于Poller线程的run方法之中:
可以看到,可读之后调用processSocket方法,该方法将读处理操作委拖给线程池处理(注意此时加入到线程池的是NioChannel,不是SocketChannel):