ServerBootstrap与Bootstrap类似,只不过这个是用于服务端的启动。下面看下具体的使用:
|
|
与上篇文章介绍的Bootstrap不同,这里传入了两个EventLoopGroup,其中bossGroup用于接收请求,workerGroup用于处理IO事件。Netty是Reactor模式的实现,有关Reactor模式请参考NIO技术概览。
这里传入的Channel类型是NioServerSocketChannel,与Bootstrap一样,在bind方法中会调用init方法,下面看下ServerBootstrap中init方法的实现:
|
|
注意一下这段代码:
|
|
这段代码向pipeLine中添加了一个ServerBootstrapAcceptor对象,ServerBootstrapAcceptor对象也是一个Handler,看下ServerBootstrapAcceptor的定义:
|
|
ServerBootstrapAcceptor继承自ChannelInboundHandlerAdapter,用于处理Inbound事件,该类的主要功能就是在服务器端接收到请求之后,会返回一个NioSocketChannel对象作为参数msg传入channelRead方法中,用变量child来表示;然后把在TimeServer中传入的childHandler添加到child所对应的pipeLine中,然后把child注册到childGroup中,也就是TimeServer中定义的workerGroup。
接收请求的操作是在NioServerSocketChannel中的doReadMessages方法中实现的:
|
|
doReadMessages方法在NioMessageUnsafe中的read方法中调用,然后会执行pipeline.fireChannelRead(readBuf.get(i));
将SocketChannel对象传入,也就是channelRead方法中的msg参数。至此,一个请求已经接收完毕,通道之间的通信就会交给childGroup,也就是TimeServer中的workerGroup来处理。