具体描述
作者简介
李明江,资深软件开发专家,安防领域技术专家,拥有超过20年的研发经验。创办过两家公司。
曾经在信雅达等国内多家上市公司担任研发要职,参与并主导了大量大型项目的研发。如在南方电网广州亚运会大型安保系统总体研发和管理中担任总负责人;参与中国电信全球眼规范、国家电网安保平台规范、南方电网/国家电网视频监控系统规范、公安部3111规范等规范的制定。
在C++、分布式平台开发、物联网、云计算、安防、信息安全等领域有非常深厚的积累,擅长Nginx和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
· · · · · · (收起)
读后感
用户评价
从整体的知识覆盖面来看,这本书展现了作者对该领域深厚的积累和广博的视野。它并没有仅仅局限于介绍某一个单一的工具特性,而是将我们引向了一个更广阔的技术生态圈进行审视。书中穿插了一些关于系统设计哲学和最佳实践的讨论,这些内容虽然不是直接的“操作指南”,但它们却为我们构建稳健、可维护的系统提供了高屋建瓴的指导思想。我特别喜欢其中关于错误处理和熔断机制的设计哲学那一部分,它让我重新审视了我们团队过去在面对系统级故障时的处理模式。这本书不只是教会你如何“建高楼”,更重要的是,它让你学会如何设计一个能抵御“地震”的建筑蓝图,这种前瞻性的思维训练,是任何速成手册都无法比拟的宝贵财富。
我特别欣赏作者在行文逻辑上的严密组织方式。这本书的章节衔接非常自然流畅,仿佛是在带领读者进行一次精心规划的“技术徒步旅行”。它不像有些技术书籍那样,东一榔头西一棒子,而是采用了递进式的学习路径。从最基础的环境搭建和核心概念的建立开始,每一步都为后续更深入的探讨打下了坚实的基础。我注意到作者在引入新的模块或功能时,总是会先给出它在整个系统中的“为什么”和“在哪里”,然后再深入讲解“怎么做”。这种自上而下的结构,极大地帮助我建立了对整个技术栈的宏观认知,而不是仅仅停留在零散的API调用层面。读到后面需要结合之前知识点进行综合应用的部分时,我发现自己能够很自然地回忆起前文的铺垫,这种“无缝衔接”的学习体验,真的非常难得,极大地提升了学习效率。
作者在语言风格上的把握,体现出一种高阶技术专家的沉稳与睿智。他的叙述不追求花哨的辞藻或故作高深的晦涩,而是用一种极其精准、克制的专业语言进行表达。这种语言风格的魅力在于,它尊重读者的智商和时间,每一个词语的选择都似乎经过了深思熟虑,旨在以最经济的方式传递最大的信息量。尤其是在解释一些底层机制和并发控制相关的复杂概念时,作者能够做到在保证技术准确性的前提下,将描述组织得井井有条,避免了冗余的解释和不必要的口水话。这使得阅读过程变成了一种高效的知识吸收过程,而不是一场与作者的“词语马拉松”。对于已经有一定基础的开发者来说,这种高度浓缩的表达方式,是最高效的学习途径。
这本书的排版和装帧设计真的给我留下了深刻的第一印象。封面设计简洁大气,用色沉稳,一看就知道是面向专业开发者的严肃读物。内页纸张的质感很不错,印刷清晰锐利,即便是密集的代码块也能看得一清二楚,长时间阅读眼睛也不会感到特别疲劳,这对于我们这种需要盯着屏幕和书本研究技术的程序员来说,是非常重要的细节。装帧结实,不像有些技术书读几次就散架了,感觉可以长期放在书架上作为参考手册。书中的图表和流程图绘制得非常规范和专业,复杂的技术概念通过这些可视化元素得以很好的拆解和呈现,使得原本可能晦涩难懂的架构逻辑瞬间清晰起来。比如在讲解请求生命周期的时候,那个流程图的层级划分和关键节点的标记,简直是教科书级别的标准,比很多在线文档的示意图都要精妙得多。整体来看,出版社在硬件制作上的用心程度,完全匹配了技术书籍应有的专业水准。
这本书的实用性简直是超乎我的预期,它绝不是一本停留在理论说教的“空谈”之作。我之前在处理一些生产环境的性能瓶颈时,总是感觉在“试错”,很多优化策略都是凭经验摸索。但这本书里的案例分析,很多都是基于真实生产场景的痛点,提供的解决方案路径清晰、步骤明确,而且关键是,每一个优化点都附带着详尽的性能测试对比数据和背后的原理剖析。这种“实战”的份量非常足,它不仅仅告诉你“怎么做”,更教会你“为什么这样做比那样做更好”。我试着按照书中的建议修改了我们线上某个高并发接口的配置逻辑,效果立竿见影,延迟降低了接近百分之二十。这种能直接转化为生产力的知识输出,是衡量一本技术书价值的硬指标,而它无疑是顶尖的。
第一印象,太基础了,json和lua语法讲起,我觉得不必看了
可以当做手册
第一印象,太基础了,json和lua语法讲起,我觉得不必看了
觉得一般般吧,书上的源码都找不到。感觉比不上gitbook上面的那本开源电子书《OpenResty最佳实践》。
看完了《devops开发运维训练营》后就在想,世界上还有比这本书更烂的书吗?当我看完这本书后发现:嗯,还真有。