反應(yīng)式Web應(yīng)用開發(fā)
定 價:69 元
- 作者:[奧地利]曼努埃爾·伯恩哈特(Manuel Bernhardt)
- 出版時間:2018/11/1
- ISBN:9787115489548
- 出 版 社:人民郵電出版社
- 中圖法分類:TP393.092.2
- 頁碼:277
- 紙張:
- 版次:01
- 開本:16開
本書以Play框架為例闡述了反應(yīng)式編程的理念以及在實際的編碼中實踐這些理念的方法,以實現(xiàn)更加靈活和高性能的Web應(yīng)用程序。
本書共11章,分成三大部分。第一部分(第1章到第4章)主要介紹了反應(yīng)式編程的基礎(chǔ)理念,并講解了函數(shù)式編程和Play框架的基礎(chǔ)知識。第二部分(第5章到第8章)介紹了反應(yīng)式Web編程的核心概念,如Future和Actor,還講解了將反應(yīng)式的理念應(yīng)用到用戶界面層的方法。第三部分(第9章到第11章)介紹了反應(yīng)式Web編程的主題,涵蓋反應(yīng)式流以及應(yīng)用程序的部署和測試等內(nèi)容。
本書適合Java Web程序開發(fā)人員和架構(gòu)師閱讀,尤其適合希望借助反應(yīng)式技術(shù)提升系統(tǒng)性能的開發(fā)人員參考,還可以作為Java編程人員學習函數(shù)式編程理念的進階讀物。
深度解析反應(yīng)式編程的基礎(chǔ)理念;
依托實例演示基礎(chǔ)理念應(yīng)用之法;
進一步講解反應(yīng)式流以及應(yīng)用程序的部署和測試等內(nèi)容
助力開發(fā)者編寫高靈活性、高性能的Web應(yīng)用程序
Manuel Bernhardt是一個很有熱情的工程師、作者、演講者和咨詢師,對構(gòu)建和運維網(wǎng)絡(luò)應(yīng)用方面的科學抱有強烈的興趣。從2008年開始,他指導(dǎo)和訓練企業(yè)團隊將應(yīng)用轉(zhuǎn)移到分布式計算架構(gòu)。最近幾年,他關(guān)注的是反應(yīng)式應(yīng)用架構(gòu)的生產(chǎn)型系統(tǒng),在這個過程中,主要使用Scala、Play框架和Akka。
Manuel喜歡旅行,經(jīng)常會在國際會議上演講。他住在維也納,并且是維也納Scala用戶組的聯(lián)合組織者。除了思考、談?wù)摵蛿[弄計算機,他喜歡將時光用在陪伴家人上,和他們一起跑步、潛水和閱讀。讀者可以在http://manuel.bernhardt.io了解到Manuel的動態(tài)。
第1章 你在談?wù)摲磻?yīng)式編程嗎 3
1.1 反應(yīng)式的背景 4
1.1.1 反應(yīng)式的起源 4
1.1.2 反應(yīng)式宣言 5
1.1.3 反應(yīng)式編程 6
1.1.4 反應(yīng)式技術(shù)的涌現(xiàn) 7
1.2 重新思考計算資源的利用 8
1.2.1 基于線程與基于事件的Web應(yīng)用服務(wù)器 8
1.2.2 開發(fā)適合多核架構(gòu)的Web應(yīng)用 11
1.2.3 水平應(yīng)用架構(gòu) 14
1.3 將故障處理作為第一考慮因素 16
1.3.1 故障是無法避免的 17
1.3.2 構(gòu)建應(yīng)用時,要充分考慮到故障 19
1.3.3 處理負載 21
1.4 小結(jié) 24
第2章 第一個反應(yīng)式Web應(yīng)用 25
2.1 創(chuàng)建并運行新工程 25
2.2 連接Twitter的流式API 28
2.2.1 獲取到Twitter API的連接憑證 28
2.2.2 解決OAuth認證的一個bug 28
2.2.3 通過Twitter API獲取流式數(shù)據(jù) 29
2.2.4 異步轉(zhuǎn)換Twitter流 33
2.3 使用WebSocket將tweet以流的方式發(fā)送到客戶端 36
2.3.1 創(chuàng)建Actor 37
2.3.2 搭建WebSocket連接并與之交互 38
2.3.3 發(fā)送tweet到WebSocket 40
2.4 讓應(yīng)用有彈性可擴展 42
2.4.1 讓客戶端變得有彈性 42
2.4.2 擴展 44
2.5 小結(jié) 46
第3章 函數(shù)式編程基礎(chǔ) 47
3.1 函數(shù)式編程概述 47
3.2 不可變性 48
3.2.1 可變狀態(tài)的謬誤 48
3.2.2 將不可變值視為現(xiàn)實的快照 49
3.2.3 面向表達式編程 50
3.3 函數(shù) 52
3.3.1 面向?qū)ο缶幊陶Z言中的函數(shù) 52
3.3.2 函數(shù)作為第一類的值 53
3.3.3 傳遞行為 53
3.3.4 組合函數(shù) 54
3.3.5 函數(shù)的大小 55
3.4 操作不可變集合 57
3.4.1 使用轉(zhuǎn)換來替換循環(huán) 57
3.4.2 用來操作集合的高階函數(shù) 58
3.5 轉(zhuǎn)換到聲明式編程風格 64
3.5.1 不要對Option使用get方法 64
3.5.2 只使用不可變值和數(shù)據(jù)結(jié)構(gòu) 65
3.5.3 致力于編寫小巧精煉的函數(shù) 65
3.5.4 迭代式地改善函數(shù)式編程風格 65
3.6 小結(jié) 66
第4章 快速掌握Play框架 67
4.1 Play應(yīng)用的結(jié)構(gòu)和配置 68
4.1.1 簡單詞匯教師應(yīng)用簡介 68
4.1.2 創(chuàng)建一個最小的Play應(yīng)用腳手架 68
4.1.3 構(gòu)建項目 71
4.2 請求處理 72
4.2.1 請求的生命周期 73
4.2.2 請求路由 76
4.2.3 控制器、Action和結(jié)果 80
4.2.4 WebSocket 86
4.2.5 調(diào)整默認的請求處理管道 89
4.3 小結(jié) 93
第二部分 核心概念
第5章 Future 97
5.1 使用Future 97
5.1.1 Future基礎(chǔ) 98
5.1.2 Play中的Future 104
5.1.3 測試Future 111
5.2 用Future來設(shè)計異步業(yè)務(wù) 113
5.2.1 識別可并行的元素 114
5.2.2 組合服務(wù)的Future 116
5.2.3 錯誤的傳播與處理 121
5.3 小結(jié) 125
第6章 Actor 127
6.1 Actor的基本原理 128
6.1.1 簡單的Twitter分析服務(wù) 128
6.1.2 搭建基礎(chǔ)框架:Actor及其子Actor 129
6.2 任其崩潰—監(jiān)管與恢復(fù) 142
6.2.1 可靠的存儲 142
6.2.2 任其崩潰 145
6.2.3 觀察Actor的消亡并將其復(fù)活 146
6.3 系統(tǒng)對負載的反應(yīng),實現(xiàn)監(jiān)控并預(yù)防服務(wù)過載 147
6.3.1 流控制消息 148
6.3.2 具有優(yōu)先級的消息 151
6.3.3 斷路器 153
6.4 小結(jié) 155
第7章 處理狀態(tài) 157
7.1 在無狀態(tài)的Play Web應(yīng)用中使用狀態(tài) 158
7.1.1 數(shù)據(jù)庫 159
7.1.2 使用Play session保持客戶端狀態(tài) 170
7.1.3 使用分布式緩存保持服務(wù)端狀態(tài) 171
7.2 命令查詢職責分離與事件溯源 173
7.2.1 Twitter SMS服務(wù) 173
7.2.2 搭建SMS網(wǎng)關(guān) 177
7.2.3 通過持久化Actor編寫事件流 179
7.2.4 配置Akka持久化,寫入到MongoDB中 182
7.2.5 處理傳入的命令:訂閱用戶在Twitter被提及的通知 183
7.2.6 將事件流轉(zhuǎn)換為關(guān)系模型 185
7.2.7 查詢關(guān)系模型 188
7.2.8 關(guān)于最終一致性 190
7.3 小結(jié) 190
第8章 反應(yīng)式用戶界面 191
8.1 集成Scala.js和Play 192
8.1.1 應(yīng)用結(jié)構(gòu) 192
8.1.2 搭建構(gòu)建流程 193
8.1.3 創(chuàng)建簡單的Scala.js應(yīng)用 195
8.2 集成Scala.js和AngularJS 196
8.2.1 搭建AngularJS綁定 196
8.2.2 創(chuàng)建AngularJS應(yīng)用 197
8.2.3 初始化AngularJS dashboard模塊及其依賴 199
8.2.4 初始化Dashboard控制器 199
8.2.5 創(chuàng)建視圖片段 200
8.2.6 在HTML中加載AngularJS應(yīng)用 200
8.3 使用Scala.js集成已有的JavaScript庫 201
8.3.1 將已有的JavaScript庫包裝為AngularJS服務(wù) 201
8.3.2 創(chuàng)建為圖表獲取數(shù)據(jù)的服務(wù) 203
8.3.3 使用Chart.js展現(xiàn)指標數(shù)據(jù) 205
8.4 處理客戶端故障 207
8.4.1 借助測試防止出現(xiàn)缺陷 207
8.4.2 探測WebSocket連接故障 209
8.4.3 通知用戶 209
8.4.4 監(jiān)控客戶端錯誤 211
8.5 小結(jié) 211
第三部分 高級話題
第9章 反應(yīng)式流 215
9.1 為什么要有反應(yīng)式流 215
9.1.1 帶有非阻塞回壓功能的流 216
9.1.2 操作異步流 217
9.2 Akka Streams簡介 218
9.2.1 核心原理 218
9.2.2 操作流式的tweet數(shù)據(jù) 219
9.3 小結(jié) 230
第10章 部署反應(yīng)式Play應(yīng)用 231
10.1 為Play應(yīng)用的生產(chǎn)環(huán)境部署做好準備 232
10.1.1 創(chuàng)建用于部署的簡單應(yīng)用 232
10.1.2 使用Selenium編寫和運行測試 234
10.1.3 為應(yīng)用的生產(chǎn)部署做好準備 236
10.2 搭建持續(xù)集成環(huán)境 239
10.2.1 在Docker中運行Jenkins 239
10.2.2 通過配置Jenkins來構(gòu)建應(yīng)用 241
10.3 部署應(yīng)用 243
10.3.1 部署到Clever Cloud 243
10.3.2 部署到自己的服務(wù)器上 245
10.3.3 該選擇哪種部署模式 248
10.4 小結(jié) 248
第11章 測試反應(yīng)式Web應(yīng)用 249
11.1 測試反應(yīng)式特質(zhì) 249
11.1.1 測試響應(yīng)性 250
11.1.2 測試彈性 250
11.1.3 測試適應(yīng)性 251
11.1.4 在哪里進行測試? 251
11.2 測試單個反應(yīng)式組件 251
11.2.1 測試單個組件的響應(yīng)性 252
11.2.2 測試單個組件的彈性 256
11.3 測試整個反應(yīng)式應(yīng)用 259
11.3.1 創(chuàng)建生成隨機數(shù)的簡單應(yīng)用 259
11.3.2 使用Gatling測試彈性 261
11.3.3 使用Bees with Machine Guns測試擴展性 265
11.4 小結(jié) 270
附錄A 安裝Play框架 271
附錄B 推薦讀物 275
附錄C 推薦資源 277