先看程式碼
上面是netty服務端的一個簡單的例子,一般可以分為五步:1、建立執行緒池;2、建立啟動類;3、配置引數;4、開啟監聽;5、阻塞直到serverSocket關閉。
下面我們一步步來看netty都做了些什麼工作:
1、建立執行緒池,從繼承關係來看,NioEventLoopGroup最終是實現了Executor介面的,NioEventLoopGroup可以理解為執行緒池。建立了兩個執行緒池bossGroup是用來處理TCP連線請求的,workGroup是來處理IO事件的。
2、建立啟動類
第2步沒什麼說的,就是建立一個啟動類。啟動類就是整個執行的上下文。
3、配置引數
group(bossGruop, workGroup)這裡面的執行緒池上面已經說了
channel(NioServerSocketChannel.class)方法會返回一個工廠類,用於後面建立 NioServerSocketChannel,NioServerSocketChannel其實就是封裝了Java中的ServerSocketChannel
childHandler中的多個ChannelHandler會組成一個pipeline,用於處理輸入和輸出。ChannelHandler的繼承圖。ChannelHandler下面有兩個介面,一個輸入ChannelInboundHandler,一個輸出ChannelOutboundHandler;一個抽象類ChannelHandlerAdapter
4、開啟監聽
serverBootstrap.bind(8080).sync()的操作, sync會阻塞直到bind完成。
主要操作就在bind裡面了,bind裡面初始化channel,併發channel註冊到selector上,這也是NIO的操作步驟,還會把之前配置的handler註冊到pipeline上。netty的pipeline可以多瞭解下,輸入輸出都會走pipeline進行處理
5、阻塞直到serverSocket關閉
最後一步f.channel().closeFuture().sync()會一直阻塞,直到serverSocket關閉。
更詳細的解釋可以看我分享的文章。
先看程式碼
上面是netty服務端的一個簡單的例子,一般可以分為五步:1、建立執行緒池;2、建立啟動類;3、配置引數;4、開啟監聽;5、阻塞直到serverSocket關閉。
下面我們一步步來看netty都做了些什麼工作:
1、建立執行緒池,從繼承關係來看,NioEventLoopGroup最終是實現了Executor介面的,NioEventLoopGroup可以理解為執行緒池。建立了兩個執行緒池bossGroup是用來處理TCP連線請求的,workGroup是來處理IO事件的。
2、建立啟動類
第2步沒什麼說的,就是建立一個啟動類。啟動類就是整個執行的上下文。
3、配置引數
group(bossGruop, workGroup)這裡面的執行緒池上面已經說了
channel(NioServerSocketChannel.class)方法會返回一個工廠類,用於後面建立 NioServerSocketChannel,NioServerSocketChannel其實就是封裝了Java中的ServerSocketChannel
childHandler中的多個ChannelHandler會組成一個pipeline,用於處理輸入和輸出。ChannelHandler的繼承圖。ChannelHandler下面有兩個介面,一個輸入ChannelInboundHandler,一個輸出ChannelOutboundHandler;一個抽象類ChannelHandlerAdapter
4、開啟監聽
serverBootstrap.bind(8080).sync()的操作, sync會阻塞直到bind完成。
主要操作就在bind裡面了,bind裡面初始化channel,併發channel註冊到selector上,這也是NIO的操作步驟,還會把之前配置的handler註冊到pipeline上。netty的pipeline可以多瞭解下,輸入輸出都會走pipeline進行處理
5、阻塞直到serverSocket關閉
最後一步f.channel().closeFuture().sync()會一直阻塞,直到serverSocket關閉。
更詳細的解釋可以看我分享的文章。