讀古今文學網 > Netty實戰 > 關於本書 >

關於本書

Netty是一款用於快速開發高性能的網絡應用程序的Java框架。它封裝了網絡編程的複雜性,使網絡編程和Web技術的最新進展能夠被比以往更廣泛的開發人員接觸到。

Netty不只是一個接口和類的集合;它還定義了一種架構模型以及一套豐富的設計模式。但是直到現在,依然缺乏一個全面的、系統性的用戶指南,已經成為入門Netty的一個障礙,這種情況也是本書旨在改變的。除了解釋該框架的組件以及API的詳細信息之外,本書還會展示Netty如何能夠幫助開發人員編寫更高效的、可復用的、可維護的代碼。

誰應該閱讀本書

本書假定讀者熟悉中等級別的Java主題,如泛型和多線程處理。不要求有高級網絡編程的經驗,但是熟悉基本的Java網絡編程API將大有裨益。

Netty使用Apache Maven作為它的構建管理工具。如果讀者還未使用過Maven,那麼附錄將會為讀者提供運行本書示例代碼所需要的信息。讀者也可以復用這些示例的Maven配置,作為自己的基於Netty的項目的起點。

導讀

本書共分4個部分,且有一個附錄。

第一部分:Netty的概念及體系結構

第一部分是對框架的詳細介紹,涵蓋了它的設計、組件以及編程接口。

第1章首先簡要概述了阻塞和非阻塞的網絡API,以及它們對應的JDK接口。我們引入Netty作為構建高度可伸縮的、異步的、事件驅動的網絡編程應用的工具包。我們將首先看一下該框架的基礎構件塊:Channel、回調、Future、事件及ChannelHandler

第2章解釋了如何配置讀者的系統以構建並運行本書中的示例代碼。我們將用一個簡單的應用程序來測試它,這是一個回送從連接的客戶端接收到的消息的服務器應用程序。我們還介紹了引導(Bootstrap)——在運行時組裝和配置一個應用程序的所有組件的過程。

第3章首先討論了Netty的技術以及體系結構方面的內容。介紹了該框架的核心組件:ChannelEventLoopChannelHandler以及ChannelPipeline。這一章的最後解釋了引導服務器和客戶端之間的差異。

第4章討論了網絡傳輸,並且對比了通過JDK API和Netty使用阻塞和非阻塞傳輸的用法。我們研究了Netty的傳輸API的底層接口的層級關係以及它們所支持的傳輸類型。

第5章專門介紹了該框架的數據處理API——ByteBuf,Netty的字節容器。我們描述了它相對於JDK的ByteBuffer的優勢,以及如何分配和訪問由ByteBuf所使用的內存。我們展示了如何通過引用計數來管理內存資源。

第6章重點介紹了核心組件ChannelHandlerChannelPipeline,它們負責調度應用程序的處理邏輯,並驅動數據和事件經過網絡層。其他的主題包括在實現高級用例時ChannelHandlerContext的角色, 以及在多個ChannelPipeline之間共享ChannelHandler的緣由。這一章的最後說明了如何處理由入站事件和出站事件所觸發的異常。

第7章提供了關於線程模型的一般概述,並詳細地介紹了Netty的線程模型。我們研究了interface EventLoop,它是Netty的並發API的主要部分,並解釋了它和線程以及Channel的關係。這個信息對於理解Netty是如何實現異步的、事件驅動的網絡編程模型來說至關重要。我們展示了如何通過EventLoop進行任務調度。

第8章以介紹Bootstrap類的層級結構作為引子,深入地講解了引導。我們重新審視了一些基本用例以及一些特殊用例,例如,在一個服務器應用程序中引導一個客戶端連接、引導數據報Channel,以及在引導的過程中添加多個ChannelHandler。這一章最後討論了如何優雅地關閉應用程序並有序地釋放所有的資源。

第9章是關於對ChannelHandler進行單元測試的討論,對此Netty提供了一個特殊的Channel實現——EmbeddedChannel。本章的示例展示了如何使用這個類和JUnit一起來測試入站和出站ChannelHandler實現。

第二部分:編解碼器

數據轉換是網絡編程中最常見的操作之一。第二部分介紹了Netty提供的用於簡化這一任務的豐富的工具集。

第10章首先解釋了解碼器和編碼器,它們將字節序列從一種格式轉換為另外一種格式。一個無處不在的例子便是將一個非結構化的字節流轉換為一個特定於協議的佈局結構,或者相反的。編解碼器則是一個結合了編碼器以及解碼器以處理雙向轉換的組件。我們提供了幾個例子,展示了通過Netty的編解碼器框架類創建自定義的解碼器以及編碼器是多麼地容易。

第11章研究了Netty提供的用於各種用例的編解碼器以及ChannelHandler。這些類包括用於協議的(如SSL/TLS、HTTP/HTTPS、WebSocket以及SPDY)即用型的編解碼器,以及能夠通過擴展來處理幾乎任意的基於分隔符的協議、變長協議或者定長協議的解碼器。這一章的最後介紹了用於寫入大型數據的和用於序列化的框架組件。

第三部分:網絡協議

第三部分詳細闡述了幾種本書前面簡要介紹過的網絡協議。我們將會再次看到Netty是如何使你能在自己的應用程序中輕鬆採用複雜的API,而又不必關心其內部複雜性的。

第12章展示了如何使用WebSocket協議來實現Web服務器和客戶端之間的雙向通信。示例程序是一個聊天室服務器,其允許所有已連接的用戶與其他已連接的用戶進行實時通信。

第13章通過利用了用戶數據報協議(UDP)的廣播能力的服務器和客戶端應用程序,說明了Netty對於無連接協議的支持。如同前面的那些示例一樣,我們使用了一組特定於協議的支持類:DatagramPacketNioDatagramChannel

第四部分:案例研究

第四部分介紹了由使用Netty實現了任務關鍵型系統的知名公司提交的5份案例研究。這些案例不僅說明了我們在整本書中所討論過的框架各個組件在現實世界中的應用,而且還演示了Netty的設計以及架構原則,在構建高度可伸縮和可擴展的應用程序方面的應用。

第14章有Droplr、Firebase以及Urban Airship提交的案例研究。

第15章有Facebook和Twitter提交的案例研究。

附錄:Maven介紹

該附錄的主要目的是提供一個對於Apache Maven的基本介紹,以便讀者可以編譯和運行本書的示例代碼清單,並在開始使用Netty時擴展它們來創建自己的項目。

介紹了以下主題:

  • Maven的主要目標和用途;
  • 安裝以及配置Maven;
  • Maven的基本概念——POM文件、構件、坐標、依賴、插件及存儲庫;
  • Maven配置的示例,POM的繼承以及聚合;
  • Maven的命令行語法。

代碼約定和下載

這本書提供了豐富的示例,說明了如何利用每個涵蓋的主題。為了將代碼和普通文本區分開,代碼清單或者正文中的代碼都是以等寬字體(如fixed-width font like this)顯示的。此外,正文中的類和方法名、對像屬性以及其他代碼相關的術語和內容也都以等寬字體呈現。

偶爾,代碼是斜體的,如reference.dump。在這種情況下,不要逐字輸入reference,要把它替換為所需的內容。

本書的源代碼可以從出版商的網站www.manning.com/books/netty-in-action以及GitHub的項目地址 https://github.com/normanmaurer/netty-in-action獲取[1]。我們將源代碼構造成了一個多模塊的Maven項目,其中包含一個頂級POM和多個對應於本書各章的模塊。

關於作者

Norman Maurer[2]是Netty的核心開發人員之一,Apache軟件基金會的一員。在過去的幾年,他還是很多開源項目的貢獻者。他是Apple公司的一名資深軟件工程師,Netty和其他網絡相關的項目是他在iCloud團隊的工作內容。

Marvin Wolfthal[3]作為開發者、架構師、講師和作者一直活躍在多個軟件開發領域。他很早就開始使用Java,並且協助Sun開發了它第一批致力於促進分佈式對像技術的程序。作為這些努力的一部分,他使用C++、Java和CORBA為Sun Education編寫了第一套跨語言的編程課程。從那時起,他的主要關注點就一直是中間件的設計和開發,主要針對金融行業。他目前是Dell Services的一名顧問,致力於將Java世界中產生的方法論拓展到其他的企業計算領域中,例如,將持續集成的實踐應用到數據庫的開發中。Marvin還是鋼琴家和作曲家,他的作品已由維也納的Universal Edition公司發行[4]。他和他的妻子凱瑟琳以及他們的3隻貓夥伴Fritz、Willy和Robbie住在馬薩諸塞州的韋斯頓。

作者在線

購買本書的讀者可以免費訪問Manning出版社運營的一個私有Web論壇[5],在那裡,可以評論本書、提技術問題,還可以獲得作者和其他用戶的幫助。如果要訪問或者訂閱該論壇,可以用Web瀏覽器訪問www.manning.com/books/netty-in-action。這個頁面提供了以下信息:註冊之後如何訪問論壇;可以獲得什麼樣的幫助;該論壇的一些行為準則;本書示例的源代碼的鏈接、勘誤表以及其他的下載資源。

Manning承諾為我們的讀者提供一個交流場所,在那裡讀者之間以及讀者和作者之間可以進行有意義的對話。但是對於作者方面的參與並沒有做任何數量上的承諾,作者對於作者在線(AO)的貢獻仍然是自願的(和無償的)。我們建議你向作者提一些富有挑戰性的問題,以免他們沒興趣回答!

只要這本書尚未絕版,就可以從出版社的網站上訪問到作者在線論壇以及之前討論的存檔。


[1] 本書中文版的源代碼可以從GitHub的項目地址href=\'https://github.com/ReactivePlatform/netty-in-action-cn獲取,也可以在異步社區(www.epubit.com.cn)本書頁面下載。——譯者注

[2] Norman Maurer的個人網站是http://normanmaurer.me/,在這裡可以找到更多關於Netty的討論。——譯者注

[3] Marvin Wolfthal的個人網站是http://www.weichi.com/maw/。——譯者注

[4] 唱片的在線試聽地址是http://www.universaledition.com/composers-and-works/Marvin-Wolfthal/composer/4038。——譯者注

[5] 本書中文版的讀者也可以訪問本書在異步社區的相應頁面。——譯者注