新書推薦:
《
大宋理财:青苗法与王安石的金融帝国(全彩插图本)
》
售價:HK$
109.8
《
安全感是内心长出的盔甲
》
售價:HK$
67.0
《
快人一步:系统性能提高之道
》
售價:HK$
110.9
《
算法图解(第2版)
》
售價:HK$
78.2
《
科学的奇幻之旅
》
售價:HK$
77.3
《
画艺循谱:晚明的画谱与消闲
》
售價:HK$
143.4
《
新民说·现实政治史:从马基雅维利到基辛格
》
售價:HK$
99.7
《
宽容是件奢侈品(人生360度·一分钟经典故事)
》
售價:HK$
44.6
|
編輯推薦: |
(1)作者拥有20 年研发和管理经验,创办过两家公司,现任蛮牛科技CEO兼研发总监。
(2)作者在C、软件研发、信息安全、物联网、云计算、分布式计算等领域有深厚积累。
(3)作者在Nginx和Lua领域有丰富的实践经验,本书中大量技术和经验都是初次对外呈现。
|
內容簡介: |
本书围绕Nginx下Lua开发语言、Nginx核心工作机制、Nginx配置方法、核心数据组件和配置及API指令进行详细讲解。本书主要分五部分:第壹部分介绍Nginx的基本操作,同时讲解了MySQL、PostgreSQL、Redis、Memcached、MongoDB、OpenResty的基本操作。第二部分详细讲解了Lua脚本语言和Lua通用库。第三部分讲解了在Nginx开发中经常使用到的一些技术,如:JSON数据交换格式、nginx.conf配置方法和配置指令;还讲解了Nginx下Lua开发的实现机制。第四部分详细介绍了常用Lua库和数据库等组件的使用方法,包括:Redis、MySQL、Memcached、PostgreSQL、MongoDB、Bit、lfs、restry.http、lcurl、FFI、cjson、Template、WebSocket。第五部分详细介绍了ngx_lua的配置指令和ngx_luaAPI,目的是帮助读者在工作中快速检索配置指令和API。
|
關於作者: |
李明江(Leelin)
资深软件开发专家,安防领域技术专家,拥有超过20年的研发经验。创办过两家公司,现任杭州蛮牛技术有限公司CEO兼研发总监。
曾经在信雅达等国内多家上市公司担任研发要职,参与并主导了大量大型项目的研发过程。如南方电网广州亚运会大型安保系统总体研发和管理,担任总负责人;参与中国电信全球眼规范、国家电网安保平台规范、南方电网国家电网视频监控系统规范、公安部3111规范等规范的制定。
在C、分布式平台开发、物联网、云计算、APP开发、信息安全等领域有非常深厚的积累,擅长Nginx和Lua开发相关的技术,有非常丰富的实践经验。此外,因为有多年的带团队和创业经历,在团队组建、技术方向确立、核心体系搭建、团队建设、核心技术攻关等方面颇有心得。
读者QQ群:196039071(Nginx Lua实战)。
|
目錄:
|
Contents?目录
前言
第一部分 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章 OpenResty49
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 keepalive68
4.2.12 pipeline69
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、debug127
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 文件IO库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 什么是JSON154
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 stream195
9.4 中文版nginx.conf201
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_lua212
10.4.2 init_worker_by_lua213
10.4.3 set_by_lua214
10.4.4 rewrite_by_lua216
10.4.5 access_by_lua217
10.4.6 content_by_lua218
10.4.7 header_filter_by_lua220
10.4.8 body_filter_by_lua220
10.4.9 log_by_lua220
10.4.10 balancer_b
|
內容試閱:
|
Preface?前言为什么写这本书在接手安防云任务之前,我做了近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。
勘误和资源由于时间有限,技术能力有限,虽然已经尽量客观,在写作过程中排除自己主观的内容,但难免有错误和不准确的地方,热忱希望你的批评和指正。
欢迎通过邮箱和我联系:13067722617@163.com。
致谢首先需要感谢我的太太一直以来对我的信任和支持,她是我一路走来的动力。写这本书的时候,九哥已经10岁了,他已经知道我在做什么了,他以我为荣,我也以他为傲。感谢我的丈人、丈母娘对我们的爱和一直以来的帮助。
写这本书的时候,我的父母又来到了我们的身边,为了和我们年轻人相处得更融洽,他们做出了巨大的改变。
最后要感谢出版社的杨福川和李艺,没有你们的努力是不会见到这本书的。感谢你们的支持和信任!
|
|