netty 記錄

towboat發表於2024-10-04

採用nio:同步非阻塞的io模型

bio: 處理多個客戶端請求時,每個客戶端連線需要一個獨立的執行緒來處理 I/O 操作,會大量消耗資源

nio組成: buffer ,selector,channel

nio採用selector,監聽socket channel 上是否有讀寫操作的事件,然後才執行讀寫

netty核心元件

bytebuf:網路傳輸使用的位元組容器

channel(管道),channelPipeline

EventLoop(事件迴圈),是一個包含多個執行緒的集合

EventLoopGroup(事件迴圈組)

工作流程如圖

details:

bootstrap,server bootstrap 對應client和server的啟動類:

  • ServerBootstrap:
    • 需要兩個執行緒組( boss group 和 worker group , 對應 接收連線和IO處理
    • 監聽一個埠
  • Bootstrap
    • 連線server主機和埠

channel:

網路介面的抽象,進行io操作,

  NioServerSocketChannel , NioSocketChannel

EventLoop:

  如前所述,是一個執行緒集合, 預設建構函式建立 執行緒數 【 CPU核心數*2】

  監聽網路事件,呼叫處理器進行IO處理

  可以繫結多個channel,每個channel一個thread處理

channelpipeline:

  是channel的一部分(1 : 1),pipeline中包含多個channelHandler , 呈現一個連結串列形狀,透過 handlercontext管理

 

channelfuture: 非同步操作的結果,implements future<T>

ChannelFuture future = channel.writeAndFlush(message);
future.addListener(new ChannelFutureListener() {
    @Override
    public void operationComplete(ChannelFuture f) throws Exception {
        if (f.isSuccess()) {
            System.out.println("Message sent successfully!");
        } else {
            System.err.println("Failed to send message: " + f.cause());
        }
    }
});

相關文章