知識鋪: 致力於打造輕知識點,持續更新每次的知識點較少,閱讀不累。不佔太多時間,不停的來喚醒你記憶深處的知識點。
一、回顧Nio編程
1.1 創建ServerSocketChannel。
1.2 設置非阻塞模式。
1.3 綁定埠,開始監聽TCP連接。
1.4 創建處理I/O線程。
1.5 創建Selector,把ssc註冊到Selector。
1.6 開始接等待客戶端連接 ssc.accept。
1.7 啟動I/O線程,while循環中輪詢channel狀態。
1.8 Selector.select()獲取到Channel,判斷客戶端狀態: 新加入客戶端(加入到監聽隊列)、讀狀態、寫狀態 三種狀態,進行處理相應的業務邏輯。
回顧下簡單服務端Nio代碼:
二、netty簡單服務端編程
2.1 創建服務啟動類 ServerBootstrap
2.2 創建accept線程 ExecutorService accept
2.3 創建處理線程 ExecutorService worker
2.4 設置socket處理工廠類 NioServerSocketChannelFactory
2.5 設置處理管道的工廠類 ChannelPipelineFactory
2.6 創建業務處理類 HelloServerHandler
2.7 業務代碼在 HelloServerHandler內完成
三、Nio和netty對比
1. netty 編寫的socket 邏輯清晰
2. netty 大量運用工廠模式設計,處理業務更靈活
3. netty API 使用簡單
4. netty 預置多種編碼方案,支持主流行網絡協議。
5. netty 通過ChannelHandler擴展,靈活多變。
6. netty 性能高,社區活躍,框架成熟。