Socket網絡通訊編程(二)

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(設計)

  • 各類傳輸類型,阻塞和非阻塞套接字統一的API
  • 使用靈活
  • 簡單但功能強大的線程模型
  • 無鏈接的DatagramSocket支持
  • 鏈邏輯,易於重用

Ease of Use(易於使用)

  • 提供大量的文檔和例子
  • 除了依賴jdk1.6+,沒有額外的依賴關係。某些功能依賴jdk1.7+,其餘特性可能有相關依賴,但都是可選的。

Performance(性能)

  • 比Java APIS更好的吞吐量和更低的延遲
  • 由於線程池和重用全部消耗較少的資源
  • 儘可能減小沒必要要的內存拷貝

Robustness(魯棒性)

魯棒性,能夠理解爲健壯性

  • 連接快或慢或超載不會致使更多的OutOfMemoryError
  • 在高速的網絡程序中不會有不公平的read/write

Security(安全性)

  • 完整的SSL/TLS和StartTLS支持
  • 能夠在如Applet或OSGI這些受限制的環境中運行

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,進行初始化的準備工做,好比設置接受傳出數據的字符集、格式以及實際處理數據的接口。

④綁定端口,執行同步阻塞方法等待服務器端啓動便可。

相關文章
相關標籤/搜索