Netty服務端是如何一步一步啟動的?
先看代碼
上面是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關閉。
更詳細的解釋可以看我分享的文章。
希望對你有所幫助,有幫助記得點贊哦!可以關注下,后面持續分享架構和Java的文章,謝謝!