1.Netty初步編程
2.HelloWorldapi
3.Netty核心技術之(TCP拆包和粘包問題)緩存
4.Netty核心技術之(編解碼技術)安全
5.Netty的UDP實現服務器
6.Netty的WebSocket實現網絡
7.Netty實現文件服務器(基於HTTP協議)框架
8.最佳實踐(數據通訊、心跳檢測)異步
9.mina入門基礎socket
1.1爲何選擇Netty分佈式
咱們已經瞭解了Socket通訊/IO/NIO/AIO編程,對於通訊模型已經有了一個初步的認識,其實僅僅是一個模型,若是想把這些真正的用於實際工做中去,那麼嗨須要不斷地完善、擴展和優化。好比很經典的TCP讀包寫包問題,或者是數據接收的大小,實際的通訊讀取與應答的處理邏輯等等一些細節問題須要咱們認真的 去思考,而這些咱們都須要大量的時間和經歷,以及豐富的經驗。因此想學會socket通訊不是件容易的事情,那麼如今,咱們就要學習一門新的技術Netty,咱們爲何選擇Netty,緣由無他,簡單!沒必要去編寫複雜的代碼邏輯去實現通訊,不須要考慮性能問題,不須要考慮編解碼的問題,半包讀寫問題等,這些強大的Netty已經幫咱們實現好了,咱們 只須要使用便可。
Netty是最流行的NIO框架,它的健壯性、功能、性能、可定製性和可擴展性在同類框架都是數一數二的。它已經獲得成百上千的商業/商用項目驗證,如Hadoop的RPC框架Avro以及JMS框架RocketMQ,還有主流的分佈式通訊框架Dubbox等等。
Netty簡介
Netty是基於Java NIO的網絡應用框架
Netty是一個NIO client-server(客戶端服務器)框架,使用Netty能夠快速開發網絡應用,例如服務器和客戶端協議。Netty提供了一種新的方式來使開發網絡應用程序,這種新的方式使得它很容易使用和有很強的擴展性。Netty的內部實現時很複雜的,可是Netty提供了簡單易用的api從網絡處理代碼中解耦業務邏輯。Netty是徹底基於NIO實現的,因此整個Netty都是異步的。
網絡應用程序一般須要有較高的可擴展性,不管是Netty仍是其餘的基於Java NIO的框架,都會提供可擴展性的解決方案。Netty中一個關鍵組成部分是它的異步特性,本章將討論同步(阻塞)和異步(非阻塞)的IO來講明爲何使用異步代碼來解決擴展性問題以及如何使用異步。
Netty的功能很是豐富
經過本書能夠學習Netty豐富的功能。下圖是Netty框架的組成
Netty特性
Development Area |
Netty Features |
Design(設計) |
|
Ease of Use(易於使用) |
|
Performance(性能) |
|
Robustness(魯棒性) |
魯棒性,能夠理解爲健壯性
|
Security(安全性) |
|
Community(社區) |
|
Helloworld入門
在學習Netty以前,先來回顧一下NIO的通訊步驟:
①建立ServerSocketChannel,爲其配置非阻塞模式。
②綁定監聽,配置TCP參數,錄入backlog大小等。
③建立一個獨立的IO線程,用於輪詢多路複用器Selector。
④建立Selector,將以前建立的ServerSocketChannel註冊到Selector上,並設置監聽標識位SelectionKey.OP_ACCEPT。
⑤啓動IO線程,在循環體中執行Selector.select()方法,輪詢就緒的通道。
⑥當輪詢處處於就緒狀態的通道時,須要進行操做位判斷,若是是ACCEPT狀態,說明是新的客戶端接入,則調用accept方法接收新的客戶端。
⑦設置新接入客戶端的一些參數,如非阻塞,並將其繼續註冊到Selector上,設置監聽標識位等。
⑧若是輪詢的通道標識位是READ,則進行讀取,構造Buffer對象等。
⑨更細節的問題還有數據沒發送完成繼續發送的問題......
好啦,開始學習Netty了。先去http://netty.io/上下載全部的Netty包。
Netty通訊的步驟:
①建立兩個NIO線程組,一個專門用於網絡事件處理(接受客戶端的鏈接),另外一個則進行網絡通訊的讀寫。
②建立一個ServerBootstrap對象,配置Netty的一系列參數,例如接受傳出數據的緩存大小等。
③建立一個用於實際處理數據的類ChannelInitializer,進行初始化的準備工做,好比設置接受傳出數據的字符集、格式以及實際處理數據的接口。
④綁定端口,執行同步阻塞方法等待服務器端啓動便可。