回覆列表
  • 1 # 淺析架構

    先看程式碼

    上面是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關閉。

    更詳細的解釋可以看我分享的文章。

  • 中秋節和大豐收的關聯?
  • 姐最的拽是什麼意思?