書馨卡幫你省薪 2024個人購書報告 2024中圖網(wǎng)年度報告
歡迎光臨中圖網(wǎng) 請 | 注冊

C++服務(wù)器開發(fā)精髓

作者:張遠龍
出版社:電子工業(yè)出版社出版時間:2021-06-01
開本: 其他 頁數(shù): 752
中 圖 價:¥77.3(4.6折) 定價  ¥168.0 登錄后可看到會員價
加入購物車 收藏
運費6元,滿39元免運費
?新疆、西藏除外
溫馨提示:5折以下圖書主要為出版社尾貨,大部分為全新(有塑封/無塑封),個別圖書品相8-9成新、切口
有劃線標(biāo)記、光盤等附件不全詳細品相說明>>
本類五星書更多>

C++服務(wù)器開發(fā)精髓 版權(quán)信息

C++服務(wù)器開發(fā)精髓 本書特色

適讀人群 :無論是對于C/C++開發(fā)者、計算機專業(yè)的學(xué)生,還是對于想了解操作系統(tǒng)原理的讀者,本書都極具參考價值。## 這本書有什么內(nèi)容? 本書詳細介紹了除數(shù)據(jù)庫外, 要成為一名合格的C++開發(fā)者需要掌握哪些知識。通過本書你將獲得: C++開發(fā)編譯調(diào)試完整技術(shù)鏈; C++ 11/14/17的常用特性和實用方法 多線程編程技術(shù); 作者精心凝煉的二十多個網(wǎng)絡(luò)編程重難點知識; 網(wǎng)絡(luò)故障排查與定位知識; 如何設(shè)計可兼容可擴展的通信協(xié)議; 如何設(shè)計高性能網(wǎng)絡(luò)框架; 如何設(shè)計高性能服務(wù)框架; 如何開發(fā)服務(wù)常用組件等。 每一章節(jié)都實實在在地剖析技術(shù)背后的原理,教你知其然更知其所以然。 ## 這本書適合哪些讀者? 如果你是個學(xué)生,將來想做C/C++后臺開發(fā),或者做了幾年C/C++后臺開發(fā)后,還沒形成自己的技術(shù)體系或者技術(shù)認(rèn)知,那么一定要閱讀本書。除了數(shù)據(jù)庫,其他部分都介紹得很詳細。 本書的突出特點就是用了非常細粒度的示例,娓娓道來,將各個技術(shù)原理都解釋清楚,詳述哪些是重點和難點,且這些示例都來自實際開發(fā)。 如果你是非C/C++技術(shù)棧的讀者,想了解自己所用的語言(如 Java/Go)的運行時在操作系統(tǒng)接口層面是如何實現(xiàn)的,那么本書也適合你。

C++服務(wù)器開發(fā)精髓 內(nèi)容簡介

本書從操作系統(tǒng)原理角度講解進行C++服務(wù)器開發(fā)所需掌握的技術(shù)棧。全書總計9章,~2章講解C++ 11/14/17新標(biāo)準(zhǔn)中的常用特性、新增類庫,以及C++開發(fā)者必須熟練掌握的開發(fā)調(diào)試工具鏈;第3~6章詳細講解C++服務(wù)器開發(fā)中的多線程編程技術(shù)、網(wǎng)絡(luò)編程重難點知識、網(wǎng)絡(luò)故障調(diào)試與排查常用工具,以及通信協(xié)議的設(shè)計思路、技巧;第7~8章詳細講解一個帶網(wǎng)絡(luò)通信組件的高性能服務(wù)的基本設(shè)計思路和注意事項;第9章進一步補充服務(wù)相關(guān)的常用模塊設(shè)計思路和方法。本書秉承的思想是,通過掌握技術(shù)原理,可以輕松制造“輪子”,靈活設(shè)計出優(yōu)雅、魯棒的服務(wù),并快速學(xué)習(xí)新技術(shù)。無論是對于C/C++開發(fā)者、計算機專業(yè)的學(xué)生,還是對于想了解操作系統(tǒng)原理的讀者,本書都極具參考價值。

C++服務(wù)器開發(fā)精髓 目錄

第1章 C++必知必會.. 1

1.1 C++ RAII慣用法... 1

1.1.1 版本1:*初的寫法... 1

1.1.2 版本2:使用goto語句... 3

1.1.3 版本3:使用do...while(0)循環(huán)... 5

1.1.4 版本4:使用RAII慣用法... 7

1.1.5 小結(jié)... 12

1.2 pimpl慣用法... 12

1.3 C++ 11/14/17新增的實用特性... 17

1.4 統(tǒng)一的類成員初始化語法與std::initializer_list. 19

1.5 C++ 17注解標(biāo)簽(attributes)... 24

1.5.1 C++ 98/03的enumeration和C++ 11的enumerator 25

1.5.2 C++ 17的注解標(biāo)簽... 25

1.6 final、override關(guān)鍵字和=default、=delete語法... 28

1.7 auto關(guān)鍵字的用法... 34

1.8 Range-based循環(huán)語法... 35

1.8.1 自定義對象如何支持Range-based循環(huán)語法... 37

1.8.2 for-each循環(huán)的實現(xiàn)原理... 38

1.9 C++ 17結(jié)構(gòu)化綁定... 39

1.10 stl容器新增的實用方法... 43

1.10.1 原位構(gòu)造與容器的emplace系列函數(shù)... 43

1.10.2 std::map的try_emplace方法與insert_or_assign方法... 44

1.11 stl 中的智能指針類詳解... 52


第2章 C++后端開發(fā)**的工具和調(diào)試知識.. 71

2.1 SSH工具與FTP工具... 71

2.1.1 Xshell 71

2.1.2 FTP. 75

2.2 makefile與CMake. 76

2.3 使用Visual Studio管理和閱讀開源項目代碼... 83

2.4 gdb調(diào)試... 87

2.4.1 被調(diào)試的程序需要帶調(diào)試信息... 87

2.4.2 啟動gdb調(diào)試的方法... 89

2.5 gdb常用命令詳解——利用gdb調(diào)試Redis. 94

2.6 使用gdb調(diào)試多線程程序... 126

2.6.1 調(diào)試多線程程序的方法... 126

2.6.2 在調(diào)試時控制線程切換... 128

2.7 使用gdb調(diào)試多進程程序——以調(diào)試Nginx為例... 137

2.8 gdb實用調(diào)試技巧... 143

2.8.1 將print輸出的字符串或字符數(shù)組完整顯示... 144

2.8.2 讓被gdb調(diào)試的程序接收信號... 144

2.8.3 函數(shù)明明存在,添加斷點時卻無效... 145

2.8.4 調(diào)試中的斷點... 146

2.8.5 自定義gdb調(diào)試命令... 147

2.9 gdb tui——gdb圖形化界面... 148

2.9.1 開啟gdb TUI模式... 149

2.9.2 gdb TUI模式下的4個窗口... 149

2.9.3 解決tui窗口不自動更新內(nèi)容的問題... 150

2.9.4 窗口焦點切換... 150

2.10 gdb的升級版——cgdb. 151

2.11 使用VisualGDB調(diào)試... 154

2.11.1 使用VisualGDB調(diào)試已經(jīng)運行的程序... 155

2.11.2 使用VisualGDB從頭調(diào)試程序... 156


第3章 多線程編程與資源同步.. 159

3.1 線程的基本概念及常見問題... 159

3.1.1 主線程退出,支線程也將退出嗎... 159

3.1.2 某個線程崩潰,會導(dǎo)致進程退出嗎... 160

3.2 線程的基本操作... 160

3.3 慣用法:將C++類對象實例指針作為線程函數(shù)的參數(shù)... 178

3.4 整型變量的原子操作... 184

3.4.1 為什么給整型變量賦值不是原子操作... 185

3.4.2 Windows平臺上對整型變量的原子操作... 186

3.4.3 C++ 11對整型變量原子操作的支持... 187

3.5 Linux線程同步對象... 190

3.5.1 Linux互斥體... 190

3.5.2 Linux信號量... 198

3.5.3 Linux條件變量... 202

3.5.4 Linux讀寫鎖... 208

3.6 Windows線程同步對象... 217

3.6.1 WaitForSingleObject與WaitForMultipleObjects函數(shù)... 217

3.6.2 Windows臨界區(qū)對象... 219

3.6.3 Windows Event對象... 224

3.6.4 Windows Mutex對象... 229

3.6.5 Windows Semaphore對象... 231

3.6.6 Windows讀寫鎖... 235

3.6.7 Windows條件變量... 238

3.6.8 在多進程之間共享線程同步對象... 243

3.7 C++ 11/14/17線程同步對象... 244

3.7.1 std::mutex系列... 244

3.7.2 std::shared_mutex. 248

3.7.3 std::condition_variable. 253

3.8 如何確保創(chuàng)建的線程一定能運行... 256

3.9 多線程使用鎖經(jīng)驗總結(jié)... 258

3.10 線程局部存儲... 262

3.10.1 Windows的線程局部存儲... 262

3.10.2 Linux的線程局部存儲... 264

3.10.3 C++ 11 的 thread_local 關(guān)鍵字... 267

3.11 C庫的非線程安全函數(shù)... 268

3.12 線程池與隊列系統(tǒng)的設(shè)計... 270

3.12.1 線程池的設(shè)計原理... 270

3.12.2 環(huán)形隊列... 275

3.12.3 消息中間件... 275

3.13 纖程(Fiber)與協(xié)程(Routine)... 277


第4章 網(wǎng)絡(luò)編程重難點解析.. 282

4.1 學(xué)習(xí)網(wǎng)絡(luò)編程時應(yīng)該掌握的socket函數(shù)... 282

4.1.1 在Linux上查看socket函數(shù)的幫助信息... 283

4.1.2 在Windows上查看socket函數(shù)的幫助信息... 285

4.2 TCP網(wǎng)絡(luò)通信的基本流程... 286

4.3 設(shè)計跨平臺網(wǎng)絡(luò)通信庫時的一些socket函數(shù)用法... 290

4.3.1 socket數(shù)據(jù)類型... 290

4.3.2 在Windows上調(diào)用socket函數(shù)... 290

4.3.3 關(guān)閉socket函數(shù)... 291

4.3.4 獲取socket函數(shù)的錯誤碼... 291

4.3.5 套接字函數(shù)的返回值... 293

4.3.6 select函數(shù)第1個參數(shù)的問題... 293

4.3.7 錯誤碼WSAEWOULDBLOCK和EWOULDBLOCK.. 294

4.4 bind函數(shù)重難點分析... 294

4.4.1 對bind函數(shù)如何選擇綁定地址... 294

4.4.2 bind函數(shù)的端口號問題... 295

4.5 select函數(shù)的用法和原理... 302

4.5.1 Linux上的select函數(shù)... 302

4.5.2 Windows上的select函數(shù)... 317

4.6 socket的阻塞模式和非阻塞模式... 318

4.6.1 如何將socket設(shè)置為非阻塞模式... 318

4.6.2 send和recv函數(shù)在阻塞和非阻塞模式下的表現(xiàn)... 320

4.6.3 非阻塞模式下send和recv函數(shù)的返回值總結(jié)... 331

4.6.4 阻塞與非阻塞socket的各自適用場景... 333

4.7 發(fā)送0字節(jié)數(shù)據(jù)的效果... 333

4.8 connect函數(shù)在阻塞和非阻塞模式下的行為... 339

4.9 連接時順便接收第1組數(shù)據(jù)... 343

4.10 如何獲取當(dāng)前socket對應(yīng)的接收緩沖區(qū)中的可讀數(shù)據(jù)量... 346

4.11 Linux EINTR錯誤碼... 351

4.12 Linux SIGPIPE信號... 352

4.13 Linux poll 函數(shù)的用法... 353

4.14 Linux epoll模型... 361

4.14.1 基本用法... 361

4.14.2 epoll_wait與poll函數(shù)的區(qū)別... 363

4.14.3 LT 模式和ET 模式... 363

4.14.4 EPOLLONESHOT 選項... 380

4.15 高效的readv和writev函數(shù)... 386

4.16 主機字節(jié)序和網(wǎng)絡(luò)字節(jié)序... 387

4.16.1 主機字節(jié)序... 387

4.16.2 網(wǎng)絡(luò)字節(jié)序... 388

4.16.3 操作系統(tǒng)提供的字節(jié)轉(zhuǎn)換函數(shù)匯總... 389

4.17 域名解析API介紹... 390


第5章 網(wǎng)絡(luò)通信故障排查常用命令.. 397

5.1 ifconfig命令... 397

5.2 ping命令... 401

5.3 telnet命令... 402

5.4 netstat命令... 407

5.5 lsof命令... 409

5.6 nc命令... 412

5.7 curl命令... 415

5.8 tcpdump命令... 416


第6章 網(wǎng)絡(luò)通信協(xié)議設(shè)計.. 422

6.1 理解TCP. 422

6.2 如何解決粘包問題... 423

6.3 解包與處理... 425

6.4 從struct到TLV.. 430

6.4.1 協(xié)議的演化... 430

6.4.2 協(xié)議的分類... 434

6.4.3 協(xié)議設(shè)計工具... 434

6.5 整型數(shù)值的壓縮... 435

6.6 設(shè)計通信協(xié)議時的注意事項... 437

6.6.1 字節(jié)對齊... 437

6.6.2 顯式地指定整型字段的長度... 438

6.6.3 涉及浮點數(shù)時要考慮精度問題... 438

6.6.4 大小端問題... 438

6.6.5 協(xié)議與自動升級功能

6.7 包分片... 439

6.8 XML與JSON格式的協(xié)議... 444

6.9 一個自定義協(xié)議示例... 445

6.10 理解HTTP. 460

6.10.1 HTTP格式介紹... 460

6.10.2 GET與POST方法... 461

6.10.3 HTTP chunk編碼... 465

6.10.4 HTTP客戶端的編碼實現(xiàn)... 466

6.10.5 HTTP服務(wù)端的實現(xiàn)... 466

6.10.6 HTTP與長連接... 471

6.10.7 libcurl 471

6.10.8 Restful接口與Java Spring MVC.. 477

6.11 SMTP、POP3與郵件客戶端... 478

6.12 WebSocket協(xié)議... 499

6.12.1 WebSocket協(xié)議的握手過程... 500

6.12.2 WebSocket協(xié)議的格式... 503

6.12.3 WebSocket協(xié)議的壓縮格式... 506

6.12.4 WebSocket協(xié)議裝包與解包示例... 508

6.12.5 解析握手協(xié)議... 512


第7章 單個服務(wù)的基本結(jié)構(gòu).. 515

7.1 網(wǎng)絡(luò)通信組件的效率問題... 515

7.1.1 高效網(wǎng)絡(luò)通信框架的設(shè)計原則... 515

7.1.2 連接的被動關(guān)閉與主動關(guān)閉... 519

7.1.3 長連接和短連接... 519

7.2 原始的服務(wù)器結(jié)構(gòu)... 520

7.3 一個連接對應(yīng)一個線程模型... 522

7.4 Reactor模式... 523

7.5 one thread one loop思想... 524

7.5.1 one thread one loop程序的基本結(jié)構(gòu)... 524

7.5.2 線程的分工... 525

7.5.3 喚醒機制的實現(xiàn)... 527

7.5.4 handle_other_things方法的實現(xiàn)邏輯... 532

7.5.5 帶定時器的程序結(jié)構(gòu)... 533

7.5.6 one thread one loop的效率保障... 534

7.6 收發(fā)數(shù)據(jù)的正確做法... 534

7.6.1 如何收取數(shù)據(jù)... 534

7.6.2 如何發(fā)送數(shù)據(jù)... 535

7.6.3 不要多個線程同時利用一個socket收(發(fā))數(shù)據(jù)... 538

7.7 發(fā)送、接收緩沖區(qū)的設(shè)計要點... 538

7.7.1 為什么需要發(fā)送緩沖區(qū)和接收緩沖區(qū)... 539

7.7.2 如何設(shè)計發(fā)送緩沖區(qū)和接收緩沖區(qū)... 539

7.7.3 服務(wù)端發(fā)送數(shù)據(jù)時對端一直不接收的問題... 543

7.8 網(wǎng)絡(luò)庫的分層設(shè)計... 544

7.8.1 網(wǎng)絡(luò)庫設(shè)計中的各個層... 544

7.8.2 將Session進一步分層... 550

7.8.3 連接信息與EventLoop/Thread的對應(yīng)關(guān)系... 551

7.9 后端服務(wù)中的定時器設(shè)計... 551

7.9.1 *簡單的定時器... 551

7.9.2 定時器設(shè)計的基本思路... 552

7.9.3 定時器邏輯的性能優(yōu)化... 561

7.9.4 對時間的緩存... 564

7.10 處理業(yè)務(wù)數(shù)據(jù)時是否一定要單獨開線程... 565

7.11 非侵入式結(jié)構(gòu)與侵入式結(jié)構(gòu)... 570

7.11.1 非侵入式結(jié)構(gòu)... 570

7.11.2 侵入式結(jié)構(gòu)... 571

7.12 帶有網(wǎng)絡(luò)通信模塊的服務(wù)器的經(jīng)典結(jié)構(gòu)... 578

7.12.1 為何要將listenfd設(shè)置成非阻塞模式... 578

7.12.2 基于one thread one loop結(jié)構(gòu)的經(jīng)典服務(wù)器結(jié)構(gòu)... 584

7.12.3 服務(wù)器的性能瓶頸... 586


第8章 Redis網(wǎng)絡(luò)通信模塊源碼分析.. 587

8.1 調(diào)試Redis環(huán)境與準(zhǔn)備... 587

8.1.1 Redis源碼編譯與啟動... 587

8.1.2 通信示例與術(shù)語約定... 589

8.2 探究redis-server端的網(wǎng)絡(luò)通信模塊... 589

8.3 探究redis-cli端的網(wǎng)絡(luò)通信模型... 663

8.4 Redis的通信協(xié)議格式... 673

8.4.1 請求命令格式... 673

8.4.2 應(yīng)答命令格式... 674

8.4.3 多命令和流水線... 677

8.4.4 特殊的redis-cli與內(nèi)聯(lián)命令... 677

8.4.5 Redis對協(xié)議數(shù)據(jù)的解析邏輯... 678


第9章 服務(wù)器開發(fā)中的常用模塊設(shè)計.. 681

9.1 斷線自動重連的應(yīng)用場景和邏輯設(shè)計... 681

9.2 ;顧C制與心跳包... 683

9.2.1 TCP keepalive選項... 683

9.2.2 應(yīng)用層的心跳包機制設(shè)計... 684

9.2.3 有代理的心跳包機制設(shè)計... 689

9.2.4 帶業(yè)務(wù)數(shù)據(jù)的心跳包... 690

9.2.5 心跳包與流量... 690

9.2.6 心跳包與調(diào)試... 691

9.2.7 心跳包與日志... 691

9.3 日志模塊的設(shè)計... 692

9.4 錯誤碼系統(tǒng)的設(shè)計... 730

9.4.1 錯誤碼的作用... 730

9.4.2 錯誤碼系統(tǒng)設(shè)計實踐... 731

9.5 監(jiān)控端口... 733


展開全部

C++服務(wù)器開發(fā)精髓 作者簡介

張遠龍,微信公眾號“高性能服務(wù)器開發(fā)”的作者,曾就職于銀天下、攜程、字節(jié)跳動等公司,做過金融交易系統(tǒng)、IM、呼叫中心等項目,研究方向為高性能高并發(fā)服務(wù)開發(fā)。

商品評論(0條)
暫無評論……
書友推薦
本類暢銷
編輯推薦
返回頂部
中圖網(wǎng)
在線客服