Java 高並發核心編程 捲1(加強版):NIO、Netty、Redis、ZooKeepe
尼恩、陳健、徐明冠、岳陽博
- 出版商: 清華大學
- 出版日期: 2022-12-01
- 定價: $828
- 售價: 8.5 折 $704
- 語言: 簡體中文
- ISBN: 7302622116
- ISBN-13: 9787302622116
-
相關分類:
Java 相關技術、Key-Value Store
立即出貨 (庫存 < 4)
買這商品的人也買了...
-
$680$537 -
$940$700 -
$580$458 -
$580$452 -
$800$600 -
$653Netty 原理解析與開發實戰
-
$600$468 -
$1,200$792 -
$620$465 -
$774$735 -
$654$621 -
$708$673 -
$708$673 -
$479$455 -
$580$458 -
$534$507 -
$1,080$713 -
$421TPM 2.0 安全算法開發示例實戰
-
$1,180$900 -
$790$624 -
$720$569 -
$1,014$963 -
$894$849 -
$880$695 -
$720$562
相關主題
商品描述
本書從操作系統底層的IO原理入手講解Java高並發核心編程知識,同時提供高性能開發的實戰案例,是一本Java高並發編程的基礎原理和實戰圖書。 本書共15章。第1~4章為高並發基礎,淺顯易懂地剖析高並發IO的底層原理,圖文並茂地介紹Java異步回調模式,細致地講解Reactor高性能模式。這些原理方面的基礎知識非常重要,會為讀者打下堅實的基礎,也是日常開發Java後台應用時解決實際問題的金鑰匙。第5~8章為Netty的原理和實戰,是本書的重中之重,主要介紹高性能通信框架Netty、Netty的重要組件、單體IM的實戰設計和模塊實現。第9~12章從TCP、HTTP入手,介紹客戶端與服務端、服務端與服務端之間的高性能HTTP通信和WebSocket通信。第13~15章對ZooKeeper、Curator API、Redis、Jedis API的使用進行詳盡的說明,以提升讀者設計和開發高並發、可擴展系統的能力。 本書兼具基礎知識和實戰案例,既可作為對Java NIO、高性能IO、高並發編程感興趣的大專院校學生以及初、中級Java工程師的自學圖書,也可作為在生產項目中需要用到Netty、Redis、ZooKeeper三大框架的架構師或項目人員的參考書。
目錄大綱
目 錄
第1章 高並發時代的必備技能 1
1.1 Netty為何這麽火 1
1.1.1 Netty火熱的程度 1
1.1.2 Netty是面試的必殺器 2
1.2 高並發利器Redis 2
1.2.1 什麽是Redis 2
1.2.2 Redis成為緩存事實標準的原因 3
1.3 分佈式利器ZooKeeper 3
1.3.1 什麽是ZooKeeper 3
1.3.2 ZooKeeper的優勢 4
1.4 高性能HTTP通信技術 4
1.4.1 十萬級以上高並發場景中的高並發HTTP通信技術 4
1.4.2 微服務之間的高並發RPC技術 6
1.5 高並發IM的綜合實踐 7
1.5.1 高並發IM的學習價值 8
1.5.2 龐大的應用場景 8
第2章 高並發IO的底層原理 9
2.1 IO讀寫的基礎原理 9
2.1.1 內核緩沖區與進程緩沖區 10
2.1.2 典型IO系統調用sys_read和sys_write的執行流程 10
2.2 5種主要的IO模型 13
2.2.1 同步阻塞IO 14
2.2.2 同步非阻塞IO 15
2.2.3 IO多路復用模型 16
2.2.4 信號驅動IO模型 18
2.2.5 異步IO模型 21
2.2.6 同步和異步、阻塞和非阻塞的區別與聯系 22
2.3 通過合理配置來支持百萬級並發連接 22
第3章 Java NIO核心詳解 25
3.1 Java NIO的起源 25
3.2 Java NIO簡介 28
3.2.1 NIO和OIO的對比 28
3.2.2 通道 29
3.2.3 理解Channel的抽象概念 29
3.2.4 選擇器 31
3.2.5 緩沖區 32
3.3 詳解NIO Buffer類及其屬性 33
3.3.1 Buffer類 33
3.3.2 Buffer類的重要屬性 33
3.3.3 Buffer的4個屬性總結 35
3.4 詳解NIO Buffer類的重要方法 36
3.4.1 allocate() 36
3.4.2 put() 37
3.4.3 flip() 38
3.4.4 get() 39
3.4.5 rewind() 40
3.4.6 mark()和reset() 42
3.4.7 clear() 43
3.4.8 使用Buffer類的基本步驟 44
3.5 詳解NIO Channel類 44
3.5.1 Channel的主要類型 44
3.5.2 FileChannel 44
3.5.3 使用FileChannel完成文件復制的實戰案例 46
3.5.4 SocketChannel 48
3.5.5 使用SocketChannel發送文件的實戰案例 49
3.5.6 DatagramChannel 51
3.5.7 使用DatagramChannel發送數據的實戰案例 53
3.6 詳解NIO Selector 54
3.6.1 選擇器以及註冊 54
3.6.2 SelectableChannel 55
3.6.3 SelectionKey 56
3.6.4 選擇器的使用流程 57
3.6.5 使用NIO實現Discard服務器的實戰案例 59
3.6.6 使用SocketChannel在服務端接收文件的實戰案例 61
第4章 鼎鼎大名的Reactor模式 67
4.1 Reactor模式的重要性 67
4.1.1 為什麽首先學習Reactor模式 67
4.1.2 Reactor模式簡介 68
4.1.3 多線程OIO的致命缺陷 69
4.2 單線程Reactor模式 70
4.2.1 什麽是單線程Reactor 70
4.2.2 單線程Reactor的參考代碼 71
4.2.3 單線程Reactor模式的EchoServer實戰案例 73
4.2.4 單線程Reactor模式的缺點 76
4.3 多線程Reactor模式 76
4.3.1 多線程版本的Reactor模式演進 76
4.3.2 多線程版本的Reactor實戰案例 77
4.3.3 多線程版本Handler的實戰案例 80
4.4 Reactor模式的優缺點 82
第5章 Netty核心原理與基礎實戰 83
5.1 第一個Netty的實戰案例DiscardServer 83
5.1.1 創建第一個Netty項目 83
5.1.2 第一個Netty服務端程序 84
5.1.3 業務處理器NettyDiscardHandler 85
5.1.4 運行NettyDiscardServer 86
5.2 解密Netty的Reactor模式 87
5.2.1 回顧Reactor模式中IO事件的處理流程 87
5.2.2 Netty中的Channel 88
5.2.3 Netty中的Reactor 89
5.2.4 Netty中的Handler 90
5.2.5 Netty中的Pipeline 92
5.3 詳解Bootstrap 93
5.3.1 父子通道 93
5.3.2 EventLoopGroup 94
5.3.3 Bootstrap的啟動流程 95
5.3.4 ChannelOption 98
5.4 詳解Channel 99
5.4.1 Channel的主要成員和方法 100
5.4.2 EmbeddedChannel 101
5.5 詳解Handler 102
5.5.1 ChannelInboundHandler入站處理器 103
5.5.2 ChannelOutboundHandler出站處理器 104
5.5.3 ChannelInitializer通道初始化處理器 105
5.5.4 ChannelInboundHandler的生命周期的實戰案例 106
5.6 詳解Pipeline 108
5.6.1 Pipeline入站處理流程 109
5.6.2 Pipeline出站處理流程 110
5.6.3 ChannelHandlerContext 112
5.6.4 HeadContext與TailContext 112
5.6.5 Pipeline入站和出站的雙向鏈接操作 114
5.6.6 截斷流水線的入站處理傳播過程 117
5.6.7 在流水線上熱插拔Handler 119
5.7 詳解ByteBuf 121
5.7.1 ByteBuf的優勢 121
5.7.2 ByteBuf的組成部分 121
5.7.3 ByteBuf的重要屬性 122
5.7.4 ByteBuf的方法 122
5.7.5 ByteBuf基本使用的實戰案例 123
5.7.6 ByteBuf的自動擴容 125
5.7.7 ByteBuf的引用計數 126
5.7.8 ByteBuf的分配器 128
5.7.9 ByteBuf緩沖區的類型 130
5.7.10 兩類ByteBuf使用的實戰案例 131
5.7.11 ByteBuf的自動創建與自動釋放 134
5.7.12 ByteBuffer的釋放原則 139
5.7.13 ByteBuf淺層復制的高級使用方式 139
5.8 Netty的零拷貝 141
5.8.1 通過CompositeByteBuf實現零拷貝 142
5.8.2 通過wrap操作實現零拷貝 144
5.8.3 ByteBuf的核心優勢小結 145
5.9 EchoServer實戰案例 145
5.9.1 NettyEchoServer 145
5.9.2 共享NettyEchoServerHandler處理器 146
5.9.3 NettyEchoClient客戶端代碼 147
5.9.4 NettyEchoClientHandler 149
第6章 Decoder與Encoder核心組件 150
6.1 詳解粘包和拆包 150
6.1.1 半包問題的實戰案例 151
6.1.2 什麽是半包問題 152
6.1.3 半包問題的根因分析 153
6.2 Decoder原理與實踐 154
6.2.1 ByteToMessageDecoder解碼器處理流程 154
6.2.2 自定義Byte2IntegerDecoder整數解碼器 155
6.2.3 ReplayingDecoder解碼器 157
6.2.4 整數的分包解碼器的實戰案例 158
6.2.5 字符串的分包解碼器的實戰案例 161
6.2.6 MessageToMessageDecoder解碼器 165
6.3 常用的內置Decoder 166
6.3.1 LineBasedFrameDecoder解碼器 166
6.3.2 DelimiterBasedFrameDecoder解碼器 167
6.3.3 LengthFieldBasedFrameDecoder解碼器 168
6.3.4 多字段Head-Content協議數據幀解析的實戰案例 170
6.4 Encoder的原理與實戰 173
6.4.1 MessageToByteEncoder編碼器 173
6.4.2 MessageToMessageEncoder編碼器 174
6.5 解碼器和編碼器的結合 176
6.5.1 ByteToMessageCodec編解碼器 176
6.5.2 CombinedChannelDuplexHandler組合器 177
第7章 序列化與反序列化:JSON和Protobuf 178
7.1 使用JSON協議通信 179
7.1.1 JSON的核心優勢 179
7.1.2 JSON序列化與反序列化開源庫 180
7.1.3 JSON序列化與反序列化實戰案例 181
7.1.4 通過Strategy模式完成不同JSON開源庫的切換 182
7.1.5 JSON傳輸的編碼器和解碼器 184
7.1.6 JSON傳輸的服務端實戰案例 185
7.1.7 JSON傳輸的客戶端實戰案例 186
7.2 使用Protobuf協議通信 187
7.2.1 一個簡單的proto文件實戰案例 188
7.2.2 通過控制台命令生成POJO和Builder 188
7.2.3 通過Maven插件生成POJO和Builder 189
7.2.4 Protobuf序列化與反序列化演示案例 190
7.3 Protobuf編解碼的實戰案例 192
7.3.1 Netty內置的Protobuf基礎編碼器和解碼器 192
7.3.2 Protobuf傳輸的服務端實戰案例 194
7.3.3 Protobuf傳輸的客戶端實戰案例 195
7.4 詳解Protobuf協議語法 196
7.4.1 proto文件的頭部聲明 196
7.4.2 Protobuf的消息結構體與消息字段 198
7.4.3 Protobuf字段的數據類型 199
7.4.4 proto文件的其他語法規範 200
7.5 序列化、反序列、編碼和解碼之間的關系 201
7.5.1 序列化和反序列的本源 201
7.5.2 編碼和解碼的原理 203
第8章 Netty單體IM系統開發實戰 206
8.1 自定義Protobuf編碼器和解碼器 206
8.1.1 自定義Protobuf編碼器 207
8.1.2 自定義Protobuf解碼器 208
8.1.3 IM系統中Protobuf消息格式的設計 209
8.2 概述IM的登錄流程 210
8.2.1 圖解登錄/響應流程的環節 211
8.2.2 客戶端涉及的主要模塊 211
8.2.3 服務端涉及的主要模塊 212
8.3 客戶端登錄處理實戰案例 212
8.3.1 LoginConsoleCommand和User POJO 213
8.3.2 LoginSender 214
8.3.3 ClientSession 217
8.3.4 LoginResponceHandler 218
8.3.5 客戶端流水線的裝配 219
8.4 服務端登錄響應實戰案例 220
8.4.1 服務端流水線的裝配 221
8.4.2 LoginRequestHandler 221
8.4.3 LoginProcesser 222
8.4.4 EventLoop線程和業務線程相互隔離 224
8.5 詳解Session服務器會話 226
8.5.1 通道的容器屬性 226
8.5.2 ServerSession服務端會話類 228
8.5.3 SessionMap會話管理器 229
8.6 點對點單聊實戰案例 229
8.6.1 單聊的端到端流程 230
8.6.2 使用客戶端的ChatConsoleCommand收集聊天內容 230
8.6.3 使用客戶端的CommandController發送POJO 231
8.6.4 使用服務端的ChatRedirectHandler進行消息轉發 231
8.6.5 使用服務端的ChatRedirectProcesser進行異步轉發 232
8.6.6 客戶端的ChatMsgHandler聊天消息處理器 233
8.7 詳解心跳檢測 234
8.7.1 網絡連接的假死現象 234
8.7.2 服務端的空閑檢測 234
8.7.3 客戶端的心跳發送 236
第9章 HTTP原理與Web服務器實戰 238
9.1 高性能Web應用的架構 238
9.1.1 十萬級並發的Web應用架構 238
9.1.2 千萬級高並發的Web應用架構 240
9.2 詳解HTTP應用層協議 243
9.2.1 HTTP簡介 243
9.2.2 HTTP的請求URL 244
9.2.3 HTTP的請求報文 245
9.2.4 HTTP的響應報文 248
9.2.5 HTTP中GET和POST的區別 250
9.3 HTTP的演進 251
9.3.1 HTTP的1.0版本 252
9.3.2 HTTP的1.1版本 254
9.3.3 HTTP的2.0版本 257
9.4 基於Netty實現簡單的Web服務器 259
9.4.1 基於Netty的HTTP服務器演示實例 260
9.4.2 基於Netty的HTTP請求的處理流程 261
9.4.3 Netty內置的HTTP報文解碼流程 262
9.4.4 基於Netty的HTTP響應編碼流程 264
9.4.5 HttpEchoHandler回顯業務處理器實戰案例 266
9.4.6 使用Postman發送多種類型的請求體 269
第10章 高並發HTTP通信的核心原理 273
10.1 需要進行HTTP連接復用的高並發場景 273
10.1.1 反向代理Nginx與Java Web服務之間的HTTP高並發通信 273
10.1.2 微服務網關與微服務Provider之間的HTTP高並發通信 274
10.1.3 微服務Provider實例之間RPC的HTTP高並發通信 275
10.1.4 Java通過HTTP客戶端訪問REST接口服務的HTTP高並發通信 275
10.2 傳輸層TCP詳解 275
10.2.1 TCP/IP的分層模型 276
10.2.2 HTTP報文傳輸原理 277
10.2.3 TCP報文格式 279
10.2.4 TCP的三次握手 283
10.2.5 TCP的四次揮手 285
10.2.6 三次握手、四次揮手的常見面試題 286
10.3 TCP連接狀態的原理與實驗 288
10.3.1 TCP/IP連接的11種狀態 288
10.3.2 通過netstat指令查看連接狀態 289
10.4 HTTP長連接的原理 291
10.4.1 HTTP長連接和短連接 291
10.4.2 不同HTTP版本中的長連接選項 292
10.5 服務端HTTP長連接技術 293
10.5.1 應用服務器Tomcat的長連接配置 293
10.5.2 Nginx承擔服務端角色時的長連接設置 296
10.5.3 服務端長連接設置的註意事項 298
10.6 客戶端HTTP長連接技術原理與實驗 299
10.6.1 HttpURLConnection短連接技術 299
10.6.2 HTTP短連接的通信實驗 302
10.6.3 Apache HttpClient客戶端的HTTP長連接技術 304
10.6.4 Apache HttpClient客戶端長連接實驗 310
10.6.5 Nginx承擔客戶端角色時的長連接技術 313
第11章 WebSocket原理與實戰 315
11.1 WebSocket協議簡介 315
11.1.1 Ajax短輪詢和長輪詢的原理 315
11.1.2 WebSocket與HTTP之間的關系 316
11.2 WebSocket回顯演示程序開發 317
11.2.1 WebSocket回顯程序的客戶端代碼 317
11.2.2 WebSocket相關的Netty內置處理類 319
11.2.3 WebSocket回顯服務器 321
11.2.4 WebSocket業務處理器 322
11.3 WebSocket協議通信的原理 324
11.3.1 抓取WebSocket協議的本機數據包 325
11.3.2 WebSocket 握手過程 325
11.3.3 WebSocket通信報文格式 328
第12章 SSL/TLS核心原理與實戰 331
12.1 什麽是SSL/TLS 331
12.1.1 SSL/TLS協議的版本演進 331
12.1.2 SSL/TLS協議的分層結構 333
12.2 加密算法原理與實戰 334
12.2.1 哈希單向加密算法原理與實戰 334
12.2.2 對稱加密算法原理與實戰 336
12.2.3 非對稱加密算法原理與實戰 338
12.2.4 數字簽名原理與實戰 341
12.3 SSL/TLS運行過程 346
12.3.1 SSL/TLS第一階段握手 346
12.3.2 SSL/TLS第二階段握手 348
12.3.3 SSL/TLS第三階段握手 351
12.3.4 SSL/TLS第四階段握手 353
12.4 詳解Keytool工具 354
12.4.1 數字證書與身份識別 354
12.4.2 存儲密鑰與證書文件格式 357
12.4.3 使用Keytool工具管理密鑰和證書 358
12.5 使用Java程序管理密鑰和證書 361
12.5.1 Java操作數據證實所涉及的核心類 361
12.5.2 使用Java程序創建密鑰和倉庫 362
12.5.3 使用Java程序導出證書文件 365
12.5.4 使用Java程序將數字證書導入信任的倉庫中 367
12.6 OIO通信中SSL/TLS實戰 370
12.6.1 JSSE安全套接字擴展核心類 371
12.6.2 JSSE安全套接字的創建過程 373
12.6.3 OIO安全通信的Echo服務端實戰 374
12.6.4 OIO安全通信的Echo客戶端實戰 375
12.7 單向認證與雙向認證 376
12.7.1 SSL/TLS單向認證 377
12.7.2 使用證書信任管理器 379
12.7.3 SSL/TLS雙向認證 381
12.8 Netty通信中SSL/TLS的使用 385
12.8.1 Netty安全通信演示實例 385
12.8.2 Netty內置的SSLEngine處理器詳解 386
12.8.3 Netty的簡單安全聊天器服務端程序 388
12.9 HTTPS安全通信實戰 391
12.9.1 使用Netty實現HTTPS回顯服務端程序 391
12.9.2 通過HttpsURLConnectionL發送HTTPS請求 392
12.9.3 測試:HTTPS服務端與客戶端的測試用例 393
第13章 ZooKeeper分佈式協調 395
13.1 ZooKeeper偽集群安裝與配置 395
13.1.1 創建數據目錄和日誌目錄 395
13.1.2 創建myid文本文件 396
13.1.3 創建和修改配置文件 397
13.1.4 配置文件示例 399
13.1.5 啟動ZooKeeper偽集群 400
13.2 使用ZooKeeper進行分佈式存儲 401
13.2.1 詳解ZooKeeper的存儲模型 401
13.2.2 zkCli客戶端指令清單 401
13.3 ZooKeeper應用開發實戰 404
13.3.1 ZkClient開源客戶端介紹 404
13.3.2 Curator開源客戶端 404
13.3.3 準備Curator開發環境 405
13.3.4 創建Curator客戶端實例 406
13.3.5 通過Curator創建節點 407
13.3.6 通過Curator讀取節點 409
13.3.7 通過Curator更新節點 410
13.3.8 通過Curator刪除節點 411
13.4 分佈式命名服務實戰 412
13.4.1 ID生成器 413
13.4.2 ZooKeeper分佈式ID 生成器的實戰案例 414
13.4.3 集群節點的命名服務的實戰案例 415
13.4.4 結合ZooKeeper實現SnowFlake ID算法 417
13.5 分佈式事件監聽的重點 422
13.5.1 Watcher標準的事件處理器 422
13.5.2 NodeCache節點緩存的監聽 425
13.5.3 PathCache子節點的監聽 427
13.5.4 TreeCache節點樹的緩存 430
13.6 分佈式鎖的原理與實戰 434
13.6.1 公平鎖和可重入鎖的原理 434
13.6.2 ZooKeeper分佈式鎖的原理 435
13.6.3 分佈式鎖的基本流程 436
13.6.4 加鎖的實現 437
13.6.5 釋放鎖的實現 442
13.6.6 分佈式鎖的使用 443
13.6.7 Curator的InterProcessMutex可重入鎖 444
13.6.8 ZooKeeper分佈式鎖的優點和缺點 445
第14章 分佈式緩存Redis實戰 446
14.1 Redis入門 446
14.1.1 Redis的安裝和配置 446
14.1.2 Redis客戶端命令 449
14.1.3 Redis Key的命名規範 450
14.2 Redis數據類型 451
14.2.1 String 451
14.2.2 列表 452
14.2.3 哈希 453
14.2.4 集合 454
14.2.5 有序集合 455
14.3 Jedis基礎編程的實戰案例 456
14.3.1 Jedis操作String 457
14.3.2 Jedis操作List 459
14.3.3 Jedis操作Hash 460
14.3.4 Jedis操作Set 461
14.3.5 Jedis操作ZSet 462
14.4 JedisPool連接池的實戰案例 464
14.4.1 JedisPool的配置 464
14.4.2 JedisPool的創建和預熱 466
14.4.3 JedisPool的使用 467
14.5 使用spring-data-redis完成CRUD的實戰案例 469
14.5.1 CRUD中應用緩存的場景 469
14.5.2 配置spring-redis.xml 470
14.5.3 使用RedisTemplate模板API 472
14.5.4 使用RedisTemplate模板API完成CRUD的實戰案例 474
14.5.5 使用RedisCallback回調完成CRUD的實戰案例 476
14.6 Spring的Redis緩存註解 478
14.6.1 使用Spring緩存註解完成CRUD的實戰案例 478
14.6.2 spring-redis.xml中配置的調整 479
14.6.3 @CachePut和@Cacheable註解 481
14.6.4 詳解@CacheEvict註解 482
14.6.5 @Caching組合註解 483
14.7 詳解SpEL 484
14.7.1 SpEL運算符 484
14.7.2 緩存註解中的SpEL 487
第15章 億級高並發IM架構與實戰 489
15.1 支撐億級用戶的高並發IM架構的理論基礎 489
15.1.1 支撐億級用戶的系統架構開發實踐 489
15.1.2 高並發架構的技術選型 490
15.1.3 詳解IM消息的序列化協議選型 491
15.1.4 詳解長連接和短連接 491
15.2 分佈式IM的命名服務的實戰案例 492
15.2.1 IM節點的POJO類 493
15.2.2 IM節點的ImWorker類 494
15.3 Worker集群的負載均衡的實戰案例 496
15.3.1 ImLoadBalance負載均衡器 497
15.3.2 與WebGate的整合 498
15.4 即時通信消息的路由和轉發的實戰案例 499
15.4.1 IM路由器WorkerRouter 500
15.4.2 IM轉發器PeerSender 502
15.5 分佈式的在線用戶統計的實戰案例 503
15.5.1 Curator的分佈式計數器 504
15.5.2 用戶上線和下線的統計 505