反應式Web應用開發 反应式Web应用开发

[奧地利]曼努埃爾·伯恩哈特

買這商品的人也買了...

商品描述

本書以Play框架為例闡述了反應式編程的理念以及在實際的編碼中實踐這些理念的方法,以實現更加靈活和高性能的Web應用程序。
本書共11章,分成三大部分。第一部分(第1章到第4章)主要介紹了反應式編程的基礎理念,並講解了函數式編程和Play框架的基礎知識。第二部分(第5章到第8章)介紹了反應式Web編程的核心概念,如Future和Actor,還講解了將反應式的理念應用到用戶界面層的方法。第三部分(第9章到第11章)介紹了反應式Web編程的主題,涵蓋反應式流以及應用程序的部署和測試等內容。
本書適合Java Web程序開發人員和架構師閱讀,尤其適合希望借助反應式技術提升系統性能的開發人員參考,還可以作為Java編程人員學習函數式編程理念的進階讀物。

作者簡介

Manuel Bernhardt是一個很有熱情的工程師、作者、演講者和諮詢師,對構建和運維網絡應用方面的科學抱有強烈的興趣。從2008年開始,他指導和訓練企業團隊將應用轉移到分佈式計算架構。最近幾年,他關注的是反應式應用架構的生產型系統,在這個過程中,主要使用Scala、Play框架和Akka。
Manuel喜歡旅行,經常會在國際會議上演講。他住在維也納,並且是維也納Scala用戶組的聯合組織者。除了思考、談論和擺弄計算機,他喜歡將時光用在陪伴家人上,和他們一起跑步、潛水和閱讀。讀者可以在http://manuel.bernhardt.io了解到Manuel的動態。

目錄大綱

第1章你在談論反應式編程嗎3 
1.1反應式的背景4 
1.1.1反應式的起源4 
1.1.2反應式宣言5 
1.1.3反應式編程6 
1.1.4反應式技術的湧現7 
1.2重新思考計算資源的利用8 
1.2.1基於線程與基於事件的Web應用服務器8 
1.2.2開發適合多核架構的Web應用11 
1.2.3水平應用架構14 
1.3將故障處理作為第一考慮因素16 
1.3.1故障是無法避免的17 
1.3.2構建應用時,要充分考慮到故障19 
1.3.3處理負載21 
1.4小結24 
第2章第一個反應式Web應用25 
2.1創建並運行新工程25 
2.2連接Twitter的流式API 28 
2.2.1獲取到Twitter API的連接憑證28 
2.2.2解決OAuth認證的一個bug 28 
2.2.3通過Twitter API獲取流式數據29 
2.2.4異步轉換Twitter流33 
2.3使用WebSocket將tweet以流的方式發送到客戶端36 
2.3.1創建Actor 37 
2.3.2搭建WebSocket連接並與之交互38
2.3.3發送tweet到WebSocket 40 
2.4讓應用有彈性可擴展42 
2.4.1讓客戶端變得有彈性42 
2.4.2擴展44 
2.5小結46 
第3章函數式編程基礎47 
3.1函數式編程概述47 
3.2不可變性48 
3.2.1可變狀態的謬誤48 
3.2.2將不可變值視為現實的快照49 
3.2.3面向表達式編程50 
3.3函數52 
3.3.1面向對象編程語言中的函數52 
3.3.2函數作為第一類的值53 
3.3.3傳遞行為53 
3.3.4組合函數54 
3.3.5函數的大小55 
3.4操作不可變集合57 
3.4.1使用轉換來替換循環57 
3.4.2用來操作集合的高階函數58 
3.5轉換到聲明式編程風格64 
3.5.1不要對Option使用get方法64 
3.5.2只使用不可變值和數據結構65 
3.5.3致力於編寫小巧精煉的函數65 
3.5.4迭代式地改善函數式編程風格65 
3.6小結66 
第4章快速掌握Play框架67 
4.1 Play應用的結構和配置68 
4.1.1簡單詞彙教師應用簡介68
4.1.2創建一個最小的Play應用腳手架68 
4.1.3構建項目71 
4.2請求處理72 
4.2.1請求的生命週期73 
4.2.2請求路由76 
4.2.3控制器、Action和結果80 
4.2.4 WebSocket 86 
4.2.5調整默認的請求處理管道89 
4.3小結93 

第二部分核心概念

第5章Future 97 
5.1使用Future 97 
5.1.1 Future基礎98 
5.1.2 Play中的Future 104 
5.1.3測試Future 111 
5.2用Future來設計異步業務113 
5.2.1識別可並行的元素114 
5.2.2組合服務的Future 116 
5.2.3錯誤的傳播與處理121 
5.3小結125 
第6章Actor 127 
6.1 Actor的基本原理128 
6.1.1簡單的Twitter分析服務128 
6.1.2搭建基礎框架:Actor及其子Actor 129 
6.2任其崩潰—監管與恢復142 
6.2.1可靠的存儲142 
6.2.2任其崩潰145 
6.2.3觀察Actor的消亡並將其復活146
6.3系統對負載的反應,實現監控並預防服務過載147 
6.3.1流控制消息148 
6.3.2具有優先級的消息151 
6.3.3斷路器153 
6.4小結155 
第7章處理狀態157 
7.1在無狀態的Play Web應用中使用狀態158 
7.1.1數據庫159 
7.1.2使用Play session保持客戶端狀態170 
7.1.3使用分佈式緩存保持服務端狀態171 
7.2命令查詢職責分離與事件溯源173 
7.2.1 Twitter SMS服務173 
7.2.2搭建SMS網關177 
7.2.3通過持久化Actor編寫事件流179 
7.2.4配置Akka持久化,寫入到MongoDB中182 
7.2.5處理傳入的命令:訂閱用戶在Twitter被提及的通知183 
7.2.6將事件流轉換為關係模型185 
7.2.7查詢關係模型188 
7.2.8關於最終一致性190 
7.3小結190 
第8章反應式用戶界面191 
8.1集成Scala.js和Play 192 
8.1.1應用結構192 
8.1.2搭建構建流程193 
8.1.3創建簡單的Scala.js應用195
8.2集成Scala.js和AngularJS 196 
8.2.1搭建AngularJS綁定196 
8.2.2創建AngularJS應用197 
8.2.3初始化AngularJS dashboard模塊及其依賴199 
8.2.4初始化Dashboard控制器199 
8.2.5創建視圖片段200 
8.2 .6在HTML中加載AngularJS應用200 
8.3使用Scala.js集成已有的JavaScript庫201 
8.3.1將已有的JavaScript庫包裝為AngularJS服務201 
8.3.2創建為圖表獲取數據的服務203 
8.3.3使用Chart.js展現指標數據205 
8.4處理客戶端故障207 
8.4.1借助測試防止出現缺陷207 
8.4.2探測WebSocket連接故障209 
8.4.3通知用戶209 
8.4.4監控客戶端錯誤211 
8.5小結211 

第三部分高級話題

第9章反應式流215 
9.1為什麼要有反應式流215 
9.1.1帶有非阻塞回壓功能的流216 
9.1.2操作異步流217 
9.2 Akka Streams簡介218 
9.2.1核心原理218
9.2.2操作流式的tweet數據219 
9.3小結230 
第10章部署反應式Play應用231 
10.1為Play應用的生產環境部署做好準備232 
10.1.1創建用於部署的簡單應用232 
10.1.2使用Selenium編寫和運行測試234 
10.1.3為應用的生產部署做好準備236 
10.2搭建持續集成環境239 
10.2.1在Docker中運行Jenkins 239 
10.2.2通過配置Jenkins來構建應用241 
10.3部署應用243 
10.3.1部署到Clever Cloud 243 
10.3.2部署到自己的服務器上245 
10.3.3該選擇哪種部署模式248 
10.4小結248 
第11章測試反應式Web應用249 
11.1測試反應式特質249 
11.1.1測試響應性250 
11.1 .2測試彈性250 
11.1.3測試適應性251 
11.1.4在哪裡進行測試?251 
11.2測試單個反應式組件251 
11.2.1測試單個組件的響應性252 
11.2.2測試單個組件的彈性256 
11.3測試整個反應式應用259 
11.3.1創建生成隨機數的簡單應用259
11.3.2使用Gatling測試彈性261 
11.3.3使用Bees with Machine Guns測試擴展性265 
11.4小結270 
附錄A安裝Play框架271 
附錄B推薦讀物275 
附錄C推薦資源277