-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

Nginx Lua開發實戰

( 簡體 字)
作者:李明江 著類別:1. -> 程式設計 -> 綜合
譯者:
出版社:機械工業出版社Nginx Lua開發實戰 3dWoo書號: 48498
詢問書籍請說出此書號!

缺書
NT售價: 495

出版日:1/1/2018
頁數:553
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787111590293
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

為什么寫這本書

在接手安防云任務之前,我做了近10年傳統安防分布式平臺的工作。安防云任務是基于云計算平臺和P2P技術向用戶提供SaaS服務。最初我的方案是將我們熟悉的分布式平臺改造成云服務,進行互聯網部署。

針對消費級攝像機的應用,我們對服務進行了裁剪,只留下幾個服務器。但是需要幾個資深的C++服務器開發工程師提供技術支持。后來,新來的架構師經過一段時間的消化后,提出了Nginx+Lua+Redis架構。他一個人只花費一個多月的時間就把業務服務寫好了。這件事情讓我感受到了Nginx+Lua的魅力。

Nginx+Lua架構帶來的改變還遠不止節約時間和成本。從做大型系統的角度來看,它還會帶來更多的東西:

調試方便:因為它不需要編譯代碼,相關訪問模塊是成熟穩定的,只需要調試新加的業務代碼即可。大型系統特別是分布式系統,調試一個功能或代碼的鏈條太長了,非常容易出錯。

降低耦合:因為架構的限制,代碼只能在必需的階段管理器中開發,代碼是一個個.lua文件,耦合性大大降低。

框架良好:因為先進的異步式多進程架構,可以充分利用系統資源。如果自行開發并維護這樣一個框架,需要大量的人力、物力。

上手容易:Lua代碼良好的結構和可讀性,使其上手速度更快。團隊成員經過快速培訓就可以上手。

在學習和使用ngx_lua的過程中我發現,網絡上資料其實非常多,但是非常零散,沒有整體性。雖然技術本身是很清晰和易用的,但是對于剛接觸這門技術的開發者來說,想要有條理、系統地把這些知識學完,可能會走一些彎路。因為很多資料已經過時了,甄別和調試會耗費很多時間和精力,同時查閱英文文檔也比較花時間。于是,我就有了把自己的學習過程和心得整理成書的想法。

隨后的時間里,我將自己學習Nginx下Lua開發的思路,以及這個過程中的資料一點點總結出來加以整理,終成本書。希望本書可以幫助跟我有一樣需求的研發工程師快速了解并掌握Nginx下Lua開發技術。

本書的主要內容和特色

通常我們學習一門語言、一門技術的時候,都是這樣一個過程:初學這項技術時,我們通常需要知道Lua語言的細節,需要知道Nginx的結構;當我們著手學習時,首先需要搭建一個學習環境,以便了解系統的結構和運行機制,同時用于編寫測試代碼;運行第一個測試代碼的時候,需要對Nginx進行配置,但是并不熟悉Nginx的配置,對于nginx.conf里的內容比較頭疼;等到我們掌握了這項開發技術,開始業務系統開發了,又往往需要針對具體問題查找配置指令的用法和參數,以及查閱API的詳細用法。

所以,本書按照這樣的不同需求,對Nginx下Lua開發技術的不同關注點做了描述。

Nginx的基本知識,包含Nginx的使用、配置、安裝、技術架構、技術特點、主要工作流程等。

外圍關系型數據庫、NoSQL數據庫、緩存等的使用范圍、安裝、使用方法、配置,如MySQL、PostgreSQL、MongoDB、Redis、Memcached。

Lua語法詳解,包含Lua系統庫。

Lua常用庫,包含Redis、MySQL、Memcached、PostgreSQL、MongoDB、Bit、lfs、restry.http、lcurl、FFI、cjson、Template、WebSocket。

兩個相對完整的Lua實例,結合實例以鞏固涉及的知識點。

ngx_lua的配置指令和API,詳細介紹了每一個官方指令和API。

我希望無論是對于Nginx Lua的初學者,還是對于經驗豐富的開發者,都可以通過本書學到基礎知識,找到常用庫的API說明,而不用查閱其他資料及官方英文文檔。

本書面向的讀者

本書適合初學Nginx下Lua開發的工程師使用。通過本書可以比較系統地學習Lua語言,學習框架下經常用到的各組件使用方法,學習Nginx下Lua程序開發;可以參照本書的內容搭建學習環境,逐一測試各組件訪問代碼,并可通過后面的例子編寫自己的訪問代碼和訪問庫。

本書適合有經驗的Nginx和Lua開發工程師使用。通過本書可以快速查閱相關數據庫、緩存、庫的使用方法;可以查閱Nginx配置指令;還可以查閱ngx_lua配置指令和API。

本書同樣適合做服務器端開發的資深工程師使用。書中講解了Nginx的核心架構和主要的工作流程,也講解了Nginx為了提高性能和并發所使用的一些關鍵技術,這些技術和算法對我們開發自己的高性能服務器有重要指導意義。

如何閱讀本書

本書主要分五部分:

第一部分(第1∼5章)介紹Nginx的基本操作,同時講解了MySQL、PostgreSQL、Redis、Memcached、MongoDB、OpenResty的基本操作。通過對本部分的學習可以掌握這些服務的安裝和使用方法,一般用于研發環境的搭建。這里還講解了Nginx核心技術和工作流程,用于幫助讀者進一步掌握Nginx的架構和流程。各個層次的讀者都可以從本部分讀起。

第二部分(第6∼7章)詳細講解了Lua腳本語言和Lua通用庫。學習Lua語言或查閱Lua語法的初學者可以直接閱讀該部分相應章節。

第三部分(第8∼10章)講解了在Nginx開發中經常使用的一些技術,如JSON數據交換格式、nginx.conf配置方法和配置指令;還講解了Nginx下Lua開發的實現機制。學習Nginx配置的讀者,學習和查閱JSON的讀者可以直接閱讀該部分相應章節,也可以跳過其他章節,直接學習Nginx下Lua的實現機制。

第四部分(第11∼26章)詳細介紹了常用Lua庫和數據庫等組件的使用方法,包括Redis、MySQL、Memcached、PostgreSQL、MongoDB、Bit、lfs、restry.http、lcurl、FFI、cjson、Template、WebSocket。要了解和學習這些內容的讀者,可以直接閱讀對應章節。這里同時給出了兩個Lua編程實例代碼,要總體了解這項編程技術的讀者可直接翻閱相應章節。

第五部分(第27∼28章)詳細介紹了ngx_lua的配置指令和ngx_lua API,目的是幫助讀者在工作中快速檢索配置指令和API。

勘誤和資源

由于時間有限,技術能力有限,雖然已經盡量客觀,在寫作過程中排除自己主觀的內容,但難免有錯誤和不準確的地方,熱忱希望你的批評和指正。

歡迎通過郵箱和我聯系。

致謝

首先需要感謝我的太太一直以來對我的信任和支持,她是我一路走來的動力。寫這本書的時候,九哥已經10歲了,他已經知道我在做什么了,他以我為榮,我也以他為傲。感謝我的丈人、丈母娘對我們的愛和一直以來的幫助。

寫這本書的時候,我的父母又來到了我們的身邊,為了和我們年輕人相處得更融洽,他們做出了巨大的改變。

最后要感謝出版社的楊福川和李藝,沒有你們的努力是不會見到這本書的。感謝你們的支持和信任!
內容簡介:

Nginx上的Lua技術是近些年來由中國人章亦春整合出來的架構,將高效、輕量級的Lua腳本語言和Nginx結合起來,可以快捷、方便地開發應用系統。使用同步式的編程習慣實現異步非阻塞的高效模式,使新上手的工程師也可以快速開發高性能應用。據資深互聯網專家描述以及本人親身體會,在典型應用下,使用Lua可以使代碼量減少90%左右,帶來的經濟效益和搶得的市場先機自不待言。對于工程師本身來講,減少加班、多點時間喝杯咖啡也是極具吸引力的。

傳統分布式平臺要升級為云平臺都是通過將已有的分布式平臺改造成云服務,進行互聯網部署,往往需要多位資深服務器開發工程師花費大量時間共同提供支持,而Nginx+Lua+Redis架構的出現,從根本上簡化了這種方式,少量工程師花費少于原有體系的工作時間即可完成業務服務搭建。

Nginx+Lua架構不僅可以節約時間和成本,從做大型系統的角度來看,它還具有諸多優勢:

調試方便:不需要編譯代碼,相關訪問模塊是成熟穩定的,只需要調試新加的業務代碼即可。大型系統,特別是分布式系統,一個功能或代碼的調試鏈條很長,非常容易出錯。

降低耦合:因為架構的限制,Lua代碼只能在必須的階段管理器中開發,代碼是一個一個.lua文件,耦合性大幅降低。

框架良好:先進的異步式多進程架構,可以充分利用系統資源。而如果自行開發并維護這樣一個框架,則需要大量的人力、物力。

上手容易:Lua代碼具有良好的結構和可讀性,上手速度更快。團隊成員經過快速培訓就可以上手。
目錄:

前言

第一部分 Nginx操作基礎

第1章 Nginx高效服務器 2

1.1 Nginx的特點 2

1.2 Nginx的安裝 3

1.3 configure命令參數 7

1.4 小結 12

第2章 數據庫的基本操作 13

2.1 Nginx應用中的數據庫 13

2.2 MySQL關系型數據庫 15

2.2.1 yum安裝方法 16

2.2.2 使用mysql測試服務 18

2.2.3 MySQL文件分布 19

2.2.4 數據庫操作 19

2.3 Redis內存數據庫 22

2.3.1 Redis安裝 22

2.3.2 啟動Redis服務 23

2.3.3 Redis 配置 23

2.3.4 參數說明 26

2.3.5 數據類型 29

2.4 PostgreSQL關系型數據庫 31

2.5 Memcached內存數據庫 33

2.5.1 Memcached安裝 34

2.5.2 連接編輯 34

2.5.3 管理Memcached服務 35

2.5.4 Memcached命令 37

2.6 MongoDB分布式NoSQL數據庫 42

2.6.1 MongoDB安裝 43

2.6.2 mongod.conf配置說明 45

2.7 小結 48

第3章 OpenResty 49

3.1 OpenResty:概述 49

3.2 OpenResty的組成 50

3.3 OpenResty的安裝 52

3.4 Nginx多實例 54

3.5 小結 54

第4章 Nginx核心技術 55

4.1 Nginx設計目標 55

4.2 Nginx架構 57

4.2.1 事件驅動 57

4.2.2 異步多階段處理 59

4.2.3 模塊化設計 61

4.2.4 管理進程、工作進程設計 63

4.2.5 內存池 65

4.2.6 連接池 66

4.2.7 時間緩存 66

4.2.8 延遲關閉 67

4.2.9 跨平臺 67

4.2.10 HTTP模塊管道過濾模式 67

4.2.11 keepalive 68

4.2.12 pipeline 69

4.3 小結 69

第5章 Nginx的工作流程 70

5.1 Nginx的啟動流程 70

5.2 管理進程的工作流程 72

5.3 工作進程的工作流程 75

5.4 配置加載流程 76

5.5 HTTP框架初始化流程 79

5.6 HTTP模塊調用流程 81

5.7 HTTP請求處理流程 82

5.8 小結 83

第二部分 Lua腳本語言

第6章 Lua教程 86

6.1 Lua基礎 86

6.1.1 Lua的特性 86

6.1.2 Lua的應用場景 87

6.1.3 安裝Lua環境 87

6.2 Lua基本語法 88

6.2.1 第一個Lua程序 88

6.2.2 注釋 89

6.2.3 標識符 90

6.2.4 關鍵詞 90

6.2.5 全局變量 90

6.3 Lua的數據類型 90

6.4 Lua變量 96

6.4.1 賦值語句 96

6.4.2 索引 97

6.5 Lua循環 98

6.6 Lua流程控制 98

6.7 Lua函數 99

6.7.1 函數的定義 99

6.7.2 多返回值 100

6.7.3 可變參數 101

6.8 Lua運算符 101

6.8.1 算術運算符 102

6.8.2 關系運算符 102

6.8.3 邏輯運算符 103

6.8.4 其他運算符 104

6.8.5 運算符的優先級 105

6.9 Lua字符串 106

6.10 Lua數組 107

6.10.1 一維數組 107

6.10.2 多維數組 108

6.11 Lua迭代器 109

6.11.1 泛型for迭代器 109

6.11.2 無狀態的迭代器 110

6.11.3 多狀態的迭代器 111

6.12 Lua表 112

6.13 Lua模塊與包 113

6.13.1 require函數 114

6.13.2 加載機制 115

6.13.3 C包 115

6.14 Lua元表 116

6.14.1 _index元方法 117

6.14.2 _newindex元方法 118

6.14.3 為表添加運算符 119

6.14.4 _call元方法 119

6.14.5 _tostring元方法 120

6.15 Lua協同程序 121

6.15.1 基本語法 121

6.15.2 生產者–消費者問題 124

6.16 Lua錯誤處理 125

6.16.1 語法錯誤 125

6.16.2 運行錯誤 125

6.16.3 錯誤處理 126

6.16.4 error函數 126

6.16.5 pcall、xpcall、debug 127

6.17 Lua調試 128

6.18 Lua垃圾回收 130

6.19 Lua面向對象 131

6.19.1 Lua中面向對象 132

6.19.2 Lua繼承 134

6.20 Lua數據庫訪問 136

6.21 小結 137

第7章 Lua通用庫 138

7.1 字符串庫 138

7.2 表庫 141

7.3 文件I/O庫 143

7.3.1 簡單模式 144

7.3.2 完全模式 145

7.3.3 其他方法 146

7.4 數學庫 147

7.5 操作系統庫 150

7.6 小結 151

第三部分 Nginx開發技術

第8章 JSON數據交換格式 154

8.1 什么是JSON 154

8.2 JSON轉換為JavaScript對象 155

8.3 JSON與XML的比較 155

8.4 JSON語法規則 156

8.5 格式化 157

8.6 小結 158

第9章 nginx.conf文件配置 159

9.1 默認nginx.conf文件 159

9.2 nginx.conf示例 162

9.3 全局配置與頂層配置塊 166

9.3.1 main全局配置 166

9.3.2 events配置塊 170

9.3.3 http服務器配置塊 172

9.3.4 ngx_http_core_module變量 194

9.3.5 stream 195

9.4 中文版nginx.conf 201

9.5 小結 204

第10章 Nginx下Lua實現機制 206

10.1 ngx_lua原理 206

10.2 HTTP請求的處理階段 209

10.3 ngx_lua的處理階段 210

10.4 Lua階段解析 212

10.4.1 init_by_lua 212

10.4.2 init_worker_by_lua 213

10.4.3 set_by_lua 214

10.4.4 rewrite_by_lua 216

10.4.5 access_by_lua 217

10.4.6 content_by_lua 218

10.4.7 header_filter_by_lua 220

10.4.8 body_filter_by_lua 220

10.4.9 log_by_lua 220

10.4.10 balancer_by_lua_block 221

10.5 小結 222

第四部分 Nginx Lua開發實戰

第11章 Redis操作 224

11.1 Redis操作方法概述 224

11.2 HttpRedis訪問方法 225

11.2.1 示例 225

11.2.2 HttpRedis API 226

11.2.3 HttpRedis變量 228

11.3 HttpRedis2Module訪問方法 229

11.3.1 示例 229

11.3.2 nginx.conf配置 230

11.3.3 常用指令 231

11.3.4 技術點 234

11.3.5 應答包解析 238

11.4 lua-resty-redis訪問方法 239

11.4.1 示例 239

11.4.2 API函數 240

11.4.3 技術點 244

11.4.4 問題列表 246

11.4.5 限制 247

11.4.6 安裝 247

11.5 小結 247

第12章 MySQL操作 248

12.1 lua-restry-mysql訪問方式 248

12.1.1 示例 248

12.1.2 安裝 250

12.1.3 方法與函數 251

12.1.4 多結果集返回示例 254

12.1.5 其他注意事項 255

12.1.6 限制 255

12.2 HttpDrizzleModule訪問方式 255

12.2.1 示例 256

12.2.2 安裝 257

12.2.3 技術點 258

12.2.4 配置指令 259

12.2.5 變量 263

12.2.6 輸出格式 264

12.3 HttpDrizzleModule完整示例 265

12.4 小結 272

第13章 Memcached操作 273

13.1 mem-nginx-module訪問方式 273

13.1.1 概述 273

13.1.2 命令 276

13.1.3 指令 279

13.1.4 安裝 281

13.1.5 說明 281

13.1.6 示例 282

13.2 lua-resty-memcached 訪問方式 285

13.2.1 概述 285

13.2.2 API 286

13.2.3 自動日志 291

13.2.4 限制 291

13.3 小結 291

第14章 PostgreSQL操作 292

14.1 概述 292

14.2 配置指令 293

14.3 配置變量 295

14.4 示例 296

14.5 小結 298

第15章 MongoDB操作 299

15.1 安裝 299

15.2 配置 299

15.3 操作函數 300

15.3.1 連接對象方法 300

15.3.2 數據庫對象方法 301

15.3.3 列對象方法 301

15.4 示例 302

15.5 小結 303

第16章 bit庫的使用 304

16.1 示例 304

16.2 安裝 305

16.3 函數 305

16.4 說明 307

16.5 小結 308

第17章 lfs庫的使用 309

17.1 目錄迭代示例 309

17.2 安裝 310

17.3 LuaFileSystem函數 310

17.4 小結 312

第18章 resty.http庫的使用 313

18.1 安裝 313

18.2 概述 314

18.3 函數 315

18.3.1 連接類 315

18.3.2 應答類 318

18.3.3 代理類 319

18.3.4 工具類 319

18.4 小結 320

第19章 lcurl庫的使用 321

19.1 安裝 321

19.1.1 安裝libcurl 321

19.1.2 安裝lcurl 322

19.2 示例 322

19.3 函數 324

19.3.1 httpform類 325

19.3.2 easy類 327

19.3.3 multi類 331

19.3.4 error類 333

19.3.5 share類 333

19.4 常用變量 334

19.4.1 字符串數組類選項 334

19.4.2 字符串選項 334

19.4.3 數值型選項 336

19.4.4 布爾型選項 337

19.5 完整示例 338

19.6 小結 340

第20章 FFI擴展C庫 341

20.1 示例 341

20.1.1 調用外部C函數 341

20.1.2 使用C結構體數據 342

20.2 FFI庫的使用 344

20.2.1 載入FFI庫 344

20.2.2 訪問標準系統函數 344

20.2.3 訪問zlib壓縮庫 345

20.2.4 為一個C類型定義元方法 346

20.2.5 轉換C語法 347

20.3 FFI API 348

20.3.1 聲明和訪問外部符號 348

20.3.2 創建cdata對象 349

20.3.3 C類型信息 349

20.3.4 功能函數 350

20.3.5 特定目標信息 351

20.3.6 方法回調 351

20.3.7 擴展標準庫函數 351

20.4 調用curl庫的完整示例 352

20.5 小結 352

第21章 cjson庫的使用 353

21.1 示例 353

21.2 函數 354

21.3 變量 358

21.4 小結 358

第22章 lua-resty-template類的使用 359

22.1 示例 359

22.2 模板符號 360

22.2.1 短轉義符號 361

22.2.2 上下文表中的復雜key 361

22.2.3 HTML轉義 361

22.2.4 保留的上下文key和評論 362

22.3 安裝 363

22.3.1 Nginx/OpenResty配置 363

22.3.2 使用document_root 363

22.3.3 使用template_root 364

22.3.4 使用template_location 364

22.4 Lua API 364

22.5 模板預編譯 368

22.6 模板助手 368

22.7 用法示例 369

22.7.1 引用模板 369

22.7.2 Layouts的views 370

22.7.3 使用Blocks 371

22.7.4 繼承 373

22.7.5 Macros 374

22.7.6 調用模板中的方法 375

22.7.7 模板內嵌的Angular或其他標簽/模板 376

22.7.8 模板內嵌的Markdown 376

22.7.9 LSP 377

22.8 FAQ 378

22.9 小結 379

第23章 WebSocket的使用 380

23.1 示例 381

23.2 安裝 383

23.3 resty.websocket.server 383

23.4 resty.websocket.client 386

23.5 resty.websocket.protocol 389

23.6 使用注意事項 390

23.7 小結 390

第24章 TCP私有服務器實例 391

24.1 協議 391

24.1.1 協議總體要求 391

24.1.2 包頭定義 392

24.1.3 協議命令 393

24.2 DDP系統架構 394

24.3 DDP服務實現 395

24.3.1 nginx.conf配置 395

24.3.2 init.lua 398

24.3.3 ddp.lua 399

24.3.4 DDP代碼解析 405

24.3.5 Redis和MySQL的

location 407

24.3.6 管理頁面REST操作 411

24.4 小結 412

第25章 WebSocket接入服務器實戰 413

25.1 nginx.conf內容 413

25.2 ws_svr.lua內容 421

25.3 update_alarts代碼 436

25.4 小結 438

第26章 Nginx應用簡述 439

26.1 簡單系統 439

26.2 讀寫分離系統 439

26.3 引入緩存系統 440

26.4 緩存主從系統 441

26.5 小結 442

第五部分 開發手冊

第27章 ngx_lua_module模塊配置指令詳解 444

27.1 概述 444

27.2 Lua配置順序 456

27.3 配置指令 457

27.4 小結 487

第28章 ngx_lua API詳解 488

28.1 概述 488

28.2 API與常量 491

28.3 小結 565
序: