Netty是什么
Netty 是一款用于創建高性能網絡應用程序的高級框架。
Netty 是一款異步的事件驅動的網絡應用程序框架,支持快速地開發可維護的高性能的面向協議的服務器
和客戶端
DotNetty是什么
DotNetty是微軟的Azure團隊仿造Netty編寫的網絡應用程序框架。
優點
- 關注點分離——業務和網絡邏輯解耦;
- 模塊化和可復用性;
- 可測試性作為首要的要求
歷史
- 阻塞Socket通信特點:
- 建立連接要阻塞線程,讀取數據要阻塞線程
- 如果要管理多個客戶端,就需要為每個客戶端建立不同的線程
- 會有大量的線程在休眠狀態,等待接收數據,資源浪費
- 每個線程都要占用系統資源
- 線程的切換很耗費系統資源
- 非阻塞Socket(NIO)特點:
- 如圖,每個Socket如果需要讀寫操作,都通過事件通知的方式通知選擇器,這樣就實現了一個線程管理多個Socket的目的。
- 選擇器甚至可以在所有的Socket空閑的時候允許線程先去干別的事情
- 減少了線程數量導致的資源占用,減少了線程切換導致的資源消耗
- Netty特點
![在這里插入圖片描述]()
Netty設計的關鍵點
異步和事件驅動是Netty設計的關鍵
核心組件
- Channel:一個連接就是一個Channel
- 回調:通知的基礎
public class ConnectHandler : SimpleChannelInboundHandler<string>
{
public override void ChannelActive(IChannelHandlerContext context)
{
// 新的連接建立的時候會觸發這個回調
base.ChannelActive(context);
}
protected override void ChannelRead0(IChannelHandlerContext ctx, string msg)
{
throw new NotImplementedException();
}
}
-
Future:通知的另一種方式,可以認為ChannelFuture是包裝了一系列Channel事件的對象。回調和Future相互補充,相互結合同時也可以理解Future是一種更加精細的回調。
但是ChannelFuture在DotNetty中被Task取代
-
事件和ChannelHandler
ChannelHandler是事件處理器,負責處理入站事件和出站事件。通常每一個事件都由一系列的Handler處理。
本文參考資料以及截圖來自《Netty實戰》
轉自cnblogs

浙公網安備 33010602011771號