採用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()); } } });