Java 高並發核心編程 捲1(加強版):NIO、Netty、Redis、ZooKeepe

尼恩、陳健、徐明冠、岳陽博

  • 出版商: 清華大學
  • 出版日期: 2022-12-01
  • 售價: $828
  • 貴賓價: 9.5$787
  • 語言: 簡體中文
  • ISBN: 7302622116
  • ISBN-13: 9787302622116
  • 相關分類: Java 相關技術Key-Value Store
  • 立即出貨 (庫存 < 3)

  • Java 高並發核心編程 捲1(加強版):NIO、Netty、Redis、ZooKeepe-preview-1
  • Java 高並發核心編程 捲1(加強版):NIO、Netty、Redis、ZooKeepe-preview-2
  • Java 高並發核心編程 捲1(加強版):NIO、Netty、Redis、ZooKeepe-preview-3
Java 高並發核心編程 捲1(加強版):NIO、Netty、Redis、ZooKeepe-preview-1

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

商品描述

本書從操作系統底層的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