-
>
全國計(jì)算機(jī)等級(jí)考試最新真考題庫模擬考場及詳解·二級(jí)MSOffice高級(jí)應(yīng)用
-
>
決戰(zhàn)行測5000題(言語理解與表達(dá))
-
>
軟件性能測試.分析與調(diào)優(yōu)實(shí)踐之路
-
>
第一行代碼Android
-
>
JAVA持續(xù)交付
-
>
EXCEL最強(qiáng)教科書(完全版)(全彩印刷)
-
>
深度學(xué)習(xí)
OPENRESTY完全開發(fā)指南:構(gòu)建百萬級(jí)別并發(fā)的WEB應(yīng)用 版權(quán)信息
- ISBN:9787121348969
- 條形碼:9787121348969 ; 978-7-121-34896-9
- 裝幀:一般膠版紙
- 冊(cè)數(shù):暫無
- 重量:暫無
- 所屬分類:>
OPENRESTY完全開發(fā)指南:構(gòu)建百萬級(jí)別并發(fā)的WEB應(yīng)用 本書特色
適讀人群 :追求高性能的Web應(yīng)用研發(fā)工程師 微服務(wù)、API網(wǎng)關(guān)、Web應(yīng)用防火墻的研發(fā)工程師 通用的HTTP/TCP/UDP應(yīng)用服務(wù)研發(fā)工程師 基于OpenResty/Nginx深度定制的研發(fā)工程師 工作在Linux系統(tǒng)上的的運(yùn)維、測試工程師 計(jì)算機(jī)編程愛好者 本書由一線技術(shù)專家基于自己的工作經(jīng)驗(yàn)精心撰寫而成,主要包括OpenResty的組成、運(yùn)行平臺(tái)、工作語言、內(nèi)部運(yùn)行機(jī)制、功能接口、各種服務(wù)的配置和開發(fā)方式。 本書作者技術(shù)功底強(qiáng),寫作水平高,寫作的圖書不唯市場論,不唯風(fēng)頭論,只寫自己一線工作經(jīng)驗(yàn),對(duì)于自己的技術(shù)書籍出版也從來都是一絲不茍,一心只為大家奉獻(xiàn)優(yōu)質(zhì)、實(shí)用且實(shí)戰(zhàn)的優(yōu)秀技術(shù)圖書!
OPENRESTY完全開發(fā)指南:構(gòu)建百萬級(jí)別并發(fā)的WEB應(yīng)用 內(nèi)容簡介
OpenResty是一個(gè)基于Nginx的高性能Web平臺(tái),能夠方便地搭建處理超高并發(fā)的動(dòng)態(tài)Web應(yīng)用、Web服務(wù)和動(dòng)態(tài)網(wǎng)關(guān)。與現(xiàn)有的其他開發(fā)語言/環(huán)境相比,OpenResty有著高性能、高靈活性、易于學(xué)習(xí)和擴(kuò)展等許多優(yōu)點(diǎn),近年來得到了越來越多開發(fā)者的關(guān)注,也有了很多成功的應(yīng)用范例,如Adobe、Dropbox、GitHub等知名公司都基于OpenResty構(gòu)建了自己的后端業(yè)務(wù)應(yīng)用。OpenResty自帶完善的幫助文檔,開發(fā)社區(qū)也很活躍,但相關(guān)的學(xué)習(xí)資料――特別是中文資料較少。本書基于作者多年使用OpenResty的經(jīng)驗(yàn),系統(tǒng)地闡述了OpenResty相關(guān)的各方面知識(shí)和要點(diǎn),幫助讀者快速掌握這個(gè)高效易用的Web開發(fā)平臺(tái),進(jìn)而實(shí)現(xiàn)HTTP/HTTPS/TCP/UDP等多種網(wǎng)絡(luò)應(yīng)用。本書結(jié)構(gòu)嚴(yán)謹(jǐn)、詳略得當(dāng),具有較強(qiáng)的實(shí)用性,適合廣大軟件開發(fā)工程師、系統(tǒng)運(yùn)維工程師、編程愛好者和計(jì)算機(jī)專業(yè)學(xué)生閱讀參考。
OPENRESTY完全開發(fā)指南:構(gòu)建百萬級(jí)別并發(fā)的WEB應(yīng)用 目錄
第0章 導(dǎo)讀 1
0.1 關(guān)于本書 1
0.2 讀者對(duì)象 1
0.3 讀者要求 3
0.4 運(yùn)行環(huán)境 3
0.5 本書的結(jié)構(gòu) 3
0.6 如何閱讀本書 5
0.7 本書的源碼 5
第1章 總論 7
1.1 簡介 7
1.2 歷史 8
1.3 組成 9
1.4 版本 11
1.5 安裝 12
1.5.1 直接安裝 12
1.5.2 源碼安裝 13
1.5.3 定制安裝 13
1.6 目錄結(jié)構(gòu) 14
1.7 啟停服務(wù) 15
1.8 組件管理工具 15
1.9 命令行工具 16
1.10 參考手冊(cè) 18
1.11 性能對(duì)比 18
1.12 應(yīng)用架構(gòu) 21
1.13 總結(jié) 22
第2章 Nginx平臺(tái) 23
2.1 簡介 23
2.2 進(jìn)程模型 24
2.3 配置文件 25
2.4 變量 26
2.5 HTTP服務(wù) 27
2.5.1 server配置 28
2.5.2 location配置 28
2.6 TCP/UDP服務(wù) 29
2.7 反向代理 29
2.7.1 上游集群 30
2.7.2 代理轉(zhuǎn)發(fā) 31
2.8 運(yùn)行日志 31
2.8.1 訪問日志 32
2.8.2 錯(cuò)誤日志 32
2.9 總結(jié) 32
第3章 Lua語言 35
3.1 簡介 35
3.2 注釋 36
3.3 數(shù)據(jù)類型 36
3.4 字符串 37
3.5 變量 38
3.6 運(yùn)算 39
3.6.1 算術(shù)運(yùn)算 39
3.6.2 關(guān)系運(yùn)算 39
3.6.3 邏輯運(yùn)算 40
3.6.4 字符串運(yùn)算 40
3.6.5 注意事項(xiàng) 41
3.7 控制語句 41
3.7.1 語句塊 41
3.7.2 賦值語句 41
3.7.3 分支語句 42
3.7.4 循環(huán)語句 43
3.8 函數(shù) 44
3.8.1 定義函數(shù) 44
3.8.2 參數(shù)和返回值 45
3.9 表 46
3.9.1 定義表 46
3.9.2 操作表 46
3.9.3 范圍循環(huán) 47
3.9.4 作為函數(shù)的參數(shù) 48
3.10 模塊 48
3.11 面向?qū)ο? 49
3.11.1 基本特性 49
3.11.2 原型模式 50
3.11.3 self參數(shù) 51
3.12 標(biāo)準(zhǔn)庫 51
3.12.1 base庫 52
3.12.2 package庫 52
3.12.3 string庫 53
3.12.4 table庫 54
3.12.5 math庫 55
3.12.6 io庫 56
3.12.7 os庫 57
3.12.8 debug庫 57
3.12.9 使用技巧 57
3.13 高級(jí)特性 58
3.13.1 閉包 58
3.13.2 保護(hù)調(diào)用 58
3.13.3 可變參數(shù) 59
3.14 總結(jié) 59
第4章 LuaJIT環(huán)境 61
4.1 簡介 61
4.2 goto語句 62
4.3 jit庫 62
4.4 table庫 63
4.5 bit庫 63
4.6 ffi庫 65
4.7 編譯為字節(jié)碼 67
4.8 編譯為機(jī)器碼 68
4.9 總結(jié) 68
第5章 開發(fā)概述 71
5.1 應(yīng)用示例 71
5.1.1 編碼實(shí)現(xiàn) 71
5.1.2 測試驗(yàn)證 73
5.2 運(yùn)行命令 74
5.3 目錄結(jié)構(gòu) 75
5.4 配置指令 76
5.5 運(yùn)行機(jī)制 77
5.5.1 處理階段 77
5.5.2 執(zhí)行程序 79
5.5.3 定時(shí)任務(wù) 81
5.5.4 流程圖 81
5.6 功能接口 83
5.7 核心庫 83
5.8 應(yīng)用開發(fā)流程 84
5.9 總結(jié) 85
第6章 基礎(chǔ)功能 87
6.1 系統(tǒng)信息 87
6.2 運(yùn)行日志 88
6.3 時(shí)間日期 89
6.3.1 當(dāng)前時(shí)間 90
6.3.2 時(shí)間戳 90
6.3.3 格式化時(shí)間戳 90
6.3.4 更新時(shí)間 91
6.3.5 睡眠 91
6.4 數(shù)據(jù)編碼 92
6.4.1 Base64 92
6.4.2 JSON 92
6.4.3 MessagePack 94
6.5 正則表達(dá)式 95
6.5.1 配置指令 95
6.5.2 匹配選項(xiàng) 96
6.5.3 匹配 96
6.5.4 查找 98
6.5.5 替換 99
6.5.6 切分 100
6.6 高速緩存 101
6.6.1 創(chuàng)建緩存 101
6.6.2 使用緩存 102
6.7 總結(jié) 103
第7章 HTTP服務(wù) 105
7.1 簡介 105
7.2 配置指令 106
7.3 常量 107
7.3.1 狀態(tài)碼 107
7.3.2 請(qǐng)求方法 108
7.4 變量 108
7.4.1 讀變量 108
7.4.2 寫變量 109
7.5 基本信息 110
7.5.1 請(qǐng)求來源 110
7.5.2 起始時(shí)間 110
7.5.3 請(qǐng)求頭 110
7.5.4 暫存數(shù)據(jù) 111
7.6 請(qǐng)求行 111
7.6.1 版本 112
7.6.2 方法 112
7.6.3 地址 112
7.6.4 參數(shù) 113
7.7 請(qǐng)求頭 114
7.7.1 讀取數(shù)據(jù) 114
7.7.2 改寫數(shù)據(jù) 115
7.8 請(qǐng)求體 115
7.8.1 丟棄數(shù)據(jù) 115
7.8.2 讀取數(shù)據(jù) 115
7.8.3 改寫數(shù)據(jù) 116
7.9 響應(yīng)頭 117
7.9.1 改寫數(shù)據(jù) 117
7.9.2 發(fā)送數(shù)據(jù) 118
7.9.3 過濾數(shù)據(jù) 118
7.10 響應(yīng)體 118
7.10.1 發(fā)送數(shù)據(jù) 118
7.10.2 過濾數(shù)據(jù) 119
7.11 手動(dòng)收發(fā)數(shù)據(jù) 120
7.12 流程控制 121
7.12.1 重定向請(qǐng)求 121
7.12.2 終止請(qǐng)求 121
7.13 檢測斷連 122
7.14 綜合示例 123
7.15 總結(jié) 126
第8章 訪問后端 127
8.1 簡介 127
8.2 子請(qǐng)求 128
8.2.1 接口說明 128
8.2.2 應(yīng)用示例 129
8.2.3 使用建議 130
8.3 協(xié)程套接字 131
8.3.1 配置指令 131
8.3.2 創(chuàng)建對(duì)象 132
8.3.3 超時(shí)設(shè)置 133
8.3.4 建立連接 133
8.3.5 復(fù)用連接 134
8.3.6 關(guān)閉連接 134
8.3.7 發(fā)送數(shù)據(jù) 135
8.3.8 接收數(shù)據(jù) 135
8.3.9 應(yīng)用示例 136
8.4 DNS客戶端 137
8.4.1 創(chuàng)建對(duì)象 138
8.4.2 查詢地址 138
8.4.3 緩存地址 139
8.5 HTTP客戶端 140
8.5.1 創(chuàng)建對(duì)象 140
8.5.2 發(fā)送請(qǐng)求 140
8.6 WebSocket客戶端 142
8.6.1 創(chuàng)建對(duì)象 142
8.6.2 建立連接 143
8.6.3 關(guān)閉連接 143
8.6.4 復(fù)用連接 143
8.6.5 發(fā)送數(shù)據(jù) 144
8.6.6 接收數(shù)據(jù) 144
8.7 Redis客戶端 145
8.7.1 創(chuàng)建對(duì)象 145
8.7.2 建立連接 145
8.7.3 關(guān)閉連接 146
8.7.4 復(fù)用連接 146
8.7.5 執(zhí)行命令 146
8.7.6 管道 147
8.7.7 腳本 148
8.8 MySQL客戶端 148
8.8.1 創(chuàng)建對(duì)象 149
8.8.2 建立連接 149
8.8.3 服務(wù)器版本號(hào) 150
8.8.4 關(guān)閉連接 150
8.8.5 復(fù)用連接 150
8.8.6 簡單查詢 150
8.8.7 高級(jí)查詢 152
8.8.8 防止SQL注入 152
8.9 總結(jié) 153
第9章 反向代理 155
9.1 簡介 155
9.2 上游集群 156
9.2.1 靜態(tài)服務(wù)器信息 157
9.2.2 動(dòng)態(tài)服務(wù)器信息 158
9.2.3 服務(wù)器下線 159
9.2.4 當(dāng)前上游集群 159
9.3 負(fù)載均衡 160
9.3.1 使用方式 160
9.3.2 功能接口 161
9.4 總結(jié) 162
第10章 高級(jí)功能 163
10.1 共享內(nèi)存 163
10.1.1 配置指令 163
10.1.2 寫操作 164
10.1.3 讀操作 165
10.1.4 刪除操作 166
10.1.5 計(jì)數(shù)操作 166
10.1.6 隊(duì)列操作 166
10.1.7 過期操作 167
10.1.8 其他操作 168
10.2 定時(shí)器 168
10.2.1 配置指令 168
10.2.2 單次任務(wù) 169
10.2.3 周期任務(wù) 170
10.3 進(jìn)程管理 171
10.3.1 進(jìn)程類型 171
10.3.2 工作進(jìn)程 172
10.3.3 監(jiān)控進(jìn)程 173
10.3.4 特權(quán)進(jìn)程 173
10.4 輕量級(jí)線程 174
10.4.1 啟動(dòng)線程 175
10.4.2 等待線程 175
10.4.3 掛起線程 176
10.4.4 停止線程 177
10.4.5 信號(hào)量 178
10.5 總結(jié) 179
第11章 HTTPS服務(wù) 181
11.1 簡介 181
11.1.1 密碼學(xué) 181
11.1.2 網(wǎng)絡(luò)協(xié)議 182
11.2 服務(wù)配置 184
11.3 應(yīng)用開發(fā) 185
11.4 基本信息 185
11.4.1 協(xié)議版本號(hào) 185
11.4.2 主機(jī)名 186
11.4.3 地址 186
11.5 加載證書 187
11.5.1 清除證書 187
11.5.2 設(shè)置證書 187
11.5.3 設(shè)置私鑰 188
11.5.4 測試驗(yàn)證 189
11.6 查驗(yàn)證書 189
11.6.1 發(fā)送查詢 189
11.6.2 通知客戶端 191
11.7 會(huì)話復(fù)用 191
11.7.1 Session ID 191
11.7.2 Session Tickets 193
11.8 總結(jié) 193
第12章 HTTP2服務(wù) 195
12.1 簡介 195
12.2 服務(wù)配置 196
12.3 應(yīng)用開發(fā) 197
12.4 測試驗(yàn)證 197
12.5 總結(jié) 198
第13章 Websocket服務(wù) 199
13.1 簡介 199
13.2 服務(wù)配置 200
13.3 應(yīng)用開發(fā) 200
13.4 總結(jié) 202
第14章 TCP/UDP服務(wù) 203
14.1 簡介 203
14.2 配置指令 204
14.3 運(yùn)行機(jī)制 205
14.3.1 處理階段 205
14.3.2 執(zhí)行程序 206
14.3.3 流程圖 206
14.4 功能接口 208
14.5 應(yīng)用示例 208
14.6 總結(jié) 210
第15章 結(jié)束語 211
附錄A 推薦書目 215
附錄B 定制OpenResty 217
OPENRESTY完全開發(fā)指南:構(gòu)建百萬級(jí)別并發(fā)的WEB應(yīng)用 節(jié)選
開發(fā)概述 由于Nginx的模塊化架構(gòu)具有良好的擴(kuò)展性,OpenResty實(shí)現(xiàn)了ngx_lua和stream_ lua等模塊,把Lua/LuaJIT完美地整合進(jìn)了Nginx,從而讓我們能夠在Nginx內(nèi)部的多個(gè)關(guān)鍵節(jié)點(diǎn)里嵌入Lua腳本,用Lua這種便捷的語言來實(shí)現(xiàn)復(fù)雜的HTTP/TCP/UDP業(yè)務(wù)邏輯,同時(shí)依然保持著高度的并發(fā)服務(wù)能力。 本章將先從一個(gè)簡單的應(yīng)用服務(wù)例子開始,從宏觀的層次介紹開發(fā)OpenResty應(yīng)用的基本流程、配置指令、運(yùn)行機(jī)制等重要知識(shí)。 5.1 應(yīng)用示例 在第3章和第4章我們學(xué)習(xí)了OpenResty里使用的Lua語言,也編寫了一些Lua程序,但它們都是使用resty-cli命令行工具運(yùn)行的,并不能對(duì)外提供服務(wù)。 本節(jié)將使用OpenResty開發(fā)出一個(gè)簡單的Web服務(wù):“Hello World”。 5.1.1 編碼實(shí)現(xiàn) 與其他的編程語言不同,使用OpenResty開發(fā)服務(wù)應(yīng)用首先要做的并不是編寫程序代碼,而是要編寫配置文件。這是因?yàn)镺penResty使用了Nginx作為運(yùn)行平臺(tái),Nginx本身需要使用配置文件來定義Web服務(wù)。這里我們將配置文件命名為“hello.conf”。 基本配置 作為Web服務(wù),我們應(yīng)該依據(jù)實(shí)際情況決定應(yīng)用的服務(wù)能力,例如開多少個(gè)worker進(jìn)程、可能的*大并發(fā)數(shù)量等。 “Hello World”應(yīng)用的功能很簡單,所以我們只開啟一個(gè)worker進(jìn)程,并發(fā)連接*多512個(gè),其他的都使用默認(rèn)配置。 在配置文件hello.conf里要使用的指令是“worker_processes”和“worker_ connections”,如下:[ 其實(shí)worker_processes和worker_connections都可以不寫,默認(rèn)值就是1個(gè)worker進(jìn)程和*多512個(gè)連接,但配置塊events{}不能省略。] worker_processes 1; #設(shè)置worker進(jìn)程的數(shù)量為1 events { #設(shè)置并發(fā)連接需要在events塊里 worker_connections 512; #單個(gè)worker的*大并發(fā)連接數(shù) } 服務(wù)配置 接下來需要決定Web服務(wù)的協(xié)議和端口號(hào),我們使用*常用的HTTP協(xié)議,端口80,域名任意。 配置HTTP服務(wù)需要編寫http{}配置塊,并在里面使用指令server、listen、server_ name依次定義端口號(hào)和域名: http { #定義HTTP服務(wù) server { #server塊,定義Web服務(wù) listen 80; #服務(wù)使用的是80端口 server_name *.*; #HTTP服務(wù)對(duì)應(yīng)任意域名 } #server塊結(jié)束 } #http塊結(jié)束 處理請(qǐng)求 有了Web服務(wù),我們還要有處理請(qǐng)求時(shí)的URI入口。因?yàn)椤癏ello World”應(yīng)用總是返回唯一的結(jié)果,所以應(yīng)當(dāng)使用“l(fā)ocation /”來匹配所有的URI: http { #定義HTTP服務(wù) server { #server塊,定義Web服務(wù) listen 80; #服務(wù)使用的是80端口 server_name *.*; #HTTP服務(wù)對(duì)應(yīng)任意域名 location / {} #location塊,匹配任意URI } #server塊結(jié)束 } #http塊結(jié)束 應(yīng)用程序 經(jīng)過前面的三個(gè)步驟,現(xiàn)在Web服務(wù)的基本框架已經(jīng)建立起來了,缺的只是服務(wù)的內(nèi)容,這是要真正編寫Lua代碼的地方。 OpenResty提供一個(gè)專用指令“content_by_lua_block”,可以在配置文件里書寫Lua代碼,產(chǎn)生響應(yīng)內(nèi)容: content_by_lua_block { -- 我們的**個(gè)OpenResty應(yīng)用 ngx.print("hello, world") -- 打印經(jīng)典的“hello, world” } #Lua代碼結(jié)束 指令里調(diào)用了OpenResty的功能接口ngx.print,向客戶端輸出了“hello, world”字符串。 完整代碼 這樣,我們的**個(gè)OpenResty應(yīng)用就完成了,完整的代碼如下: worker_processes 1; #設(shè)置worker進(jìn)程的數(shù)量為1 events { #設(shè)置并發(fā)連接需要在events塊里 worker_connections 512; #單個(gè)worker的*大連接數(shù) } http { #定義HTTP服務(wù) server { #server塊,定義Web服務(wù) listen 80; #服務(wù)使用的是80端口 server_name *.*; #HTTP服務(wù)對(duì)應(yīng)任意域名 location / { #location塊,匹配任意URI content_by_lua_block { -- 我們的**個(gè)OpenResty應(yīng)用 ngx.print("hello, world") -- 打印經(jīng)典的“hello, world” } #Lua代碼結(jié)束 } #location塊結(jié)束 } #server塊結(jié)束 } #http塊結(jié)束 5.1.2 測試驗(yàn)證 OpenResty應(yīng)用開發(fā)完成之后不需要編譯,可以部署后直接運(yùn)行對(duì)外提供Web服務(wù)。但注意不能簡單地執(zhí)行“bin/openresty”,那將會(huì)使用OpenResty默認(rèn)的配置文件而不是我們剛編寫的配置文件。 啟動(dòng)應(yīng)用需要使用“-c”參數(shù),讓OpenResty以指定的配置文件運(yùn)行: /usr/local/openresty/bin/openresty -c "`pwd`/hello.conf" 現(xiàn)在就可以使用curl來驗(yàn)證“Hello World”應(yīng)用的運(yùn)行情況了: curl -v 127.0.0.1 #curl命令發(fā)送HTTP請(qǐng)求 curl -v 127.0.0.1/hello #總會(huì)得到“hello, world” 停止應(yīng)用時(shí)同樣需要加上“-c”參數(shù): /usr/local/openresty/bin/openresty -c "`pwd`/hello.conf" -s stop ……
OPENRESTY完全開發(fā)指南:構(gòu)建百萬級(jí)別并發(fā)的WEB應(yīng)用 作者簡介
羅劍鋒(網(wǎng)名Chrono),96年就讀于東北財(cái)經(jīng)大學(xué) 1997年開始接觸C/C++ 1998年參加計(jì)算機(jī)軟件專業(yè)技術(shù)資格和水平考試,獲高級(jí)程序員資質(zhì) 2003年畢業(yè)于北京理工大學(xué),獲計(jì)算機(jī)專業(yè)碩士學(xué)位主要研究方向?yàn)镃/C++、設(shè)計(jì)模式、高性能網(wǎng)絡(luò)服務(wù)器開發(fā)業(yè)余愛好是閱讀、旅游、欣賞音樂和電影。
- >
小考拉的故事-套裝共3冊(cè)
- >
朝聞道
- >
羅曼·羅蘭讀書隨筆-精裝
- >
詩經(jīng)-先民的歌唱
- >
李白與唐代文化
- >
羅庸西南聯(lián)大授課錄
- >
名家?guī)阕x魯迅:朝花夕拾
- >
【精裝繪本】畫給孩子的中國神話