
包邮OPENRESTY完全开发指南:构建百万级别并发的WEB应用

温馨提示:5折以下图书主要为出版社尾货,大部分为全新(有塑封/无塑封),个别图书品相8-9成新、切口有划线标记、光盘等附件不全详细品相说明>>
- ISBN:9787121348969
- 装帧:一般胶版纸
- 册数:暂无
- 重量:暂无
- 开本:其他
- 页数:228
- 出版时间:2017-03-01
- 条形码:9787121348969 ; 978-7-121-34896-9
本书特色
适读人群 :追求高性能的Web应用研发工程师 微服务、API网关、Web应用防火墙的研发工程师 通用的HTTP/TCP/UDP应用服务研发工程师 基于OpenResty/Nginx深度定制的研发工程师 工作在Linux系统上的的运维、测试工程师 计算机编程爱好者 本书由一线技术专家基于自己的工作经验精心撰写而成,主要包括OpenResty的组成、运行平台、工作语言、内部运行机制、功能接口、各种服务的配置和开发方式。 本书作者技术功底强,写作水平高,写作的图书不唯市场论,不唯风头论,只写自己一线工作经验,对于自己的技术书籍出版也从来都是一丝不苟,一心只为大家奉献优质、实用且实战的优秀技术图书!
内容简介
OpenResty是一个基于Nginx的高性能Web平台,能够方便地搭建处理超高并发的动态Web应用、Web服务和动态网关。与现有的其他开发语言/环境相比,OpenResty有着高性能、高灵活性、易于学习和扩展等许多优点,近年来得到了越来越多开发者的关注,也有了很多成功的应用范例,如Adobe、Dropbox、GitHub等知名公司都基于OpenResty构建了自己的后端业务应用。OpenResty自带完善的帮助文档,开发社区也很活跃,但相关的学习资料――特别是中文资料较少。本书基于作者多年使用OpenResty的经验,系统地阐述了OpenResty相关的各方面知识和要点,帮助读者快速掌握这个高效易用的Web开发平台,进而实现HTTP/HTTPS/TCP/UDP等多种网络应用。本书结构严谨、详略得当,具有较强的实用性,适合广大软件开发工程师、系统运维工程师、编程爱好者和计算机专业学生阅读参考。
目录
第0章 导读 1
0.1 关于本书 1
0.2 读者对象 1
0.3 读者要求 3
0.4 运行环境 3
0.5 本书的结构 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 目录结构 14
1.7 启停服务 15
1.8 组件管理工具 15
1.9 命令行工具 16
1.10 参考手册 18
1.11 性能对比 18
1.12 应用架构 21
1.13 总结 22
第2章 Nginx平台 23
2.1 简介 23
2.2 进程模型 24
2.3 配置文件 25
2.4 变量 26
2.5 HTTP服务 27
2.5.1 server配置 28
2.5.2 location配置 28
2.6 TCP/UDP服务 29
2.7 反向代理 29
2.7.1 上游集群 30
2.7.2 代理转发 31
2.8 运行日志 31
2.8.1 访问日志 32
2.8.2 错误日志 32
2.9 总结 32
第3章 Lua语言 35
3.1 简介 35
3.2 注释 36
3.3 数据类型 36
3.4 字符串 37
3.5 变量 38
3.6 运算 39
3.6.1 算术运算 39
3.6.2 关系运算 39
3.6.3 逻辑运算 40
3.6.4 字符串运算 40
3.6.5 注意事项 41
3.7 控制语句 41
3.7.1 语句块 41
3.7.2 赋值语句 41
3.7.3 分支语句 42
3.7.4 循环语句 43
3.8 函数 44
3.8.1 定义函数 44
3.8.2 参数和返回值 45
3.9 表 46
3.9.1 定义表 46
3.9.2 操作表 46
3.9.3 范围循环 47
3.9.4 作为函数的参数 48
3.10 模块 48
3.11 面向对象 49
3.11.1 基本特性 49
3.11.2 原型模式 50
3.11.3 self参数 51
3.12 标准库 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 高级特性 58
3.13.1 闭包 58
3.13.2 保护调用 58
3.13.3 可变参数 59
3.14 总结 59
第4章 LuaJIT环境 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 编译为字节码 67
4.8 编译为机器码 68
4.9 总结 68
第5章 开发概述 71
5.1 应用示例 71
5.1.1 编码实现 71
5.1.2 测试验证 73
5.2 运行命令 74
5.3 目录结构 75
5.4 配置指令 76
5.5 运行机制 77
5.5.1 处理阶段 77
5.5.2 执行程序 79
5.5.3 定时任务 81
5.5.4 流程图 81
5.6 功能接口 83
5.7 核心库 83
5.8 应用开发流程 84
5.9 总结 85
第6章 基础功能 87
6.1 系统信息 87
6.2 运行日志 88
6.3 时间日期 89
6.3.1 当前时间 90
6.3.2 时间戳 90
6.3.3 格式化时间戳 90
6.3.4 更新时间 91
6.3.5 睡眠 91
6.4 数据编码 92
6.4.1 Base64 92
6.4.2 JSON 92
6.4.3 MessagePack 94
6.5 正则表达式 95
6.5.1 配置指令 95
6.5.2 匹配选项 96
6.5.3 匹配 96
6.5.4 查找 98
6.5.5 替换 99
6.5.6 切分 100
6.6 高速缓存 101
6.6.1 创建缓存 101
6.6.2 使用缓存 102
6.7 总结 103
第7章 HTTP服务 105
7.1 简介 105
7.2 配置指令 106
7.3 常量 107
7.3.1 状态码 107
7.3.2 请求方法 108
7.4 变量 108
7.4.1 读变量 108
7.4.2 写变量 109
7.5 基本信息 110
7.5.1 请求来源 110
7.5.2 起始时间 110
7.5.3 请求头 110
7.5.4 暂存数据 111
7.6 请求行 111
7.6.1 版本 112
7.6.2 方法 112
7.6.3 地址 112
7.6.4 参数 113
7.7 请求头 114
7.7.1 读取数据 114
7.7.2 改写数据 115
7.8 请求体 115
7.8.1 丢弃数据 115
7.8.2 读取数据 115
7.8.3 改写数据 116
7.9 响应头 117
7.9.1 改写数据 117
7.9.2 发送数据 118
7.9.3 过滤数据 118
7.10 响应体 118
7.10.1 发送数据 118
7.10.2 过滤数据 119
7.11 手动收发数据 120
7.12 流程控制 121
7.12.1 重定向请求 121
7.12.2 终止请求 121
7.13 检测断连 122
7.14 综合示例 123
7.15 总结 126
第8章 访问后端 127
8.1 简介 127
8.2 子请求 128
8.2.1 接口说明 128
8.2.2 应用示例 129
8.2.3 使用建议 130
8.3 协程套接字 131
8.3.1 配置指令 131
8.3.2 创建对象 132
8.3.3 超时设置 133
8.3.4 建立连接 133
8.3.5 复用连接 134
8.3.6 关闭连接 134
8.3.7 发送数据 135
8.3.8 接收数据 135
8.3.9 应用示例 136
8.4 DNS客户端 137
8.4.1 创建对象 138
8.4.2 查询地址 138
8.4.3 缓存地址 139
8.5 HTTP客户端 140
8.5.1 创建对象 140
8.5.2 发送请求 140
8.6 WebSocket客户端 142
8.6.1 创建对象 142
8.6.2 建立连接 143
8.6.3 关闭连接 143
8.6.4 复用连接 143
8.6.5 发送数据 144
8.6.6 接收数据 144
8.7 Redis客户端 145
8.7.1 创建对象 145
8.7.2 建立连接 145
8.7.3 关闭连接 146
8.7.4 复用连接 146
8.7.5 执行命令 146
8.7.6 管道 147
8.7.7 脚本 148
8.8 MySQL客户端 148
8.8.1 创建对象 149
8.8.2 建立连接 149
8.8.3 服务器版本号 150
8.8.4 关闭连接 150
8.8.5 复用连接 150
8.8.6 简单查询 150
8.8.7 高级查询 152
8.8.8 防止SQL注入 152
8.9 总结 153
第9章 反向代理 155
9.1 简介 155
9.2 上游集群 156
9.2.1 静态服务器信息 157
9.2.2 动态服务器信息 158
9.2.3 服务器下线 159
9.2.4 当前上游集群 159
9.3 负载均衡 160
9.3.1 使用方式 160
9.3.2 功能接口 161
9.4 总结 162
第10章 高级功能 163
10.1 共享内存 163
10.1.1 配置指令 163
10.1.2 写操作 164
10.1.3 读操作 165
10.1.4 删除操作 166
10.1.5 计数操作 166
10.1.6 队列操作 166
10.1.7 过期操作 167
10.1.8 其他操作 168
10.2 定时器 168
10.2.1 配置指令 168
10.2.2 单次任务 169
10.2.3 周期任务 170
10.3 进程管理 171
10.3.1 进程类型 171
10.3.2 工作进程 172
10.3.3 监控进程 173
10.3.4 特权进程 173
10.4 轻量级线程 174
10.4.1 启动线程 175
10.4.2 等待线程 175
10.4.3 挂起线程 176
10.4.4 停止线程 177
10.4.5 信号量 178
10.5 总结 179
第11章 HTTPS服务 181
11.1 简介 181
11.1.1 密码学 181
11.1.2 网络协议 182
11.2 服务配置 184
11.3 应用开发 185
11.4 基本信息 185
11.4.1 协议版本号 185
11.4.2 主机名 186
11.4.3 地址 186
11.5 加载证书 187
11.5.1 清除证书 187
11.5.2 设置证书 187
11.5.3 设置私钥 188
11.5.4 测试验证 189
11.6 查验证书 189
11.6.1 发送查询 189
11.6.2 通知客户端 191
11.7 会话复用 191
11.7.1 Session ID 191
11.7.2 Session Tickets 193
11.8 总结 193
第12章 HTTP2服务 195
12.1 简介 195
12.2 服务配置 196
12.3 应用开发 197
12.4 测试验证 197
12.5 总结 198
第13章 Websocket服务 199
13.1 简介 199
13.2 服务配置 200
13.3 应用开发 200
13.4 总结 202
第14章 TCP/UDP服务 203
14.1 简介 203
14.2 配置指令 204
14.3 运行机制 205
14.3.1 处理阶段 205
14.3.2 执行程序 206
14.3.3 流程图 206
14.4 功能接口 208
14.5 应用示例 208
14.6 总结 210
第15章 结束语 211
附录A 推荐书目 215
附录B 定制OpenResty 217
节选
开发概述 由于Nginx的模块化架构具有良好的扩展性,OpenResty实现了ngx_lua和stream_ lua等模块,把Lua/LuaJIT完美地整合进了Nginx,从而让我们能够在Nginx内部的多个关键节点里嵌入Lua脚本,用Lua这种便捷的语言来实现复杂的HTTP/TCP/UDP业务逻辑,同时依然保持着高度的并发服务能力。 本章将先从一个简单的应用服务例子开始,从宏观的层次介绍开发OpenResty应用的基本流程、配置指令、运行机制等重要知识。 5.1 应用示例 在第3章和第4章我们学习了OpenResty里使用的Lua语言,也编写了一些Lua程序,但它们都是使用resty-cli命令行工具运行的,并不能对外提供服务。 本节将使用OpenResty开发出一个简单的Web服务:“Hello World”。 5.1.1 编码实现 与其他的编程语言不同,使用OpenResty开发服务应用首先要做的并不是编写程序代码,而是要编写配置文件。这是因为OpenResty使用了Nginx作为运行平台,Nginx本身需要使用配置文件来定义Web服务。这里我们将配置文件命名为“hello.conf”。 基本配置 作为Web服务,我们应该依据实际情况决定应用的服务能力,例如开多少个worker进程、可能的*大并发数量等。 “Hello World”应用的功能很简单,所以我们只开启一个worker进程,并发连接*多512个,其他的都使用默认配置。 在配置文件hello.conf里要使用的指令是“worker_processes”和“worker_ connections”,如下:[ 其实worker_processes和worker_connections都可以不写,默认值就是1个worker进程和*多512个连接,但配置块events{}不能省略。] worker_processes 1; #设置worker进程的数量为1 events { #设置并发连接需要在events块里 worker_connections 512; #单个worker的*大并发连接数 } 服务配置 接下来需要决定Web服务的协议和端口号,我们使用*常用的HTTP协议,端口80,域名任意。 配置HTTP服务需要编写http{}配置块,并在里面使用指令server、listen、server_ name依次定义端口号和域名: http { #定义HTTP服务 server { #server块,定义Web服务 listen 80; #服务使用的是80端口 server_name *.*; #HTTP服务对应任意域名 } #server块结束 } #http块结束 处理请求 有了Web服务,我们还要有处理请求时的URI入口。因为“Hello World”应用总是返回唯一的结果,所以应当使用“location /”来匹配所有的URI: http { #定义HTTP服务 server { #server块,定义Web服务 listen 80; #服务使用的是80端口 server_name *.*; #HTTP服务对应任意域名 location / {} #location块,匹配任意URI } #server块结束 } #http块结束 应用程序 经过前面的三个步骤,现在Web服务的基本框架已经建立起来了,缺的只是服务的内容,这是要真正编写Lua代码的地方。 OpenResty提供一个专用指令“content_by_lua_block”,可以在配置文件里书写Lua代码,产生响应内容: content_by_lua_block { -- 我们的**个OpenResty应用 ngx.print("hello, world") -- 打印经典的“hello, world” } #Lua代码结束 指令里调用了OpenResty的功能接口ngx.print,向客户端输出了“hello, world”字符串。 完整代码 这样,我们的**个OpenResty应用就完成了,完整的代码如下: worker_processes 1; #设置worker进程的数量为1 events { #设置并发连接需要在events块里 worker_connections 512; #单个worker的*大连接数 } http { #定义HTTP服务 server { #server块,定义Web服务 listen 80; #服务使用的是80端口 server_name *.*; #HTTP服务对应任意域名 location / { #location块,匹配任意URI content_by_lua_block { -- 我们的**个OpenResty应用 ngx.print("hello, world") -- 打印经典的“hello, world” } #Lua代码结束 } #location块结束 } #server块结束 } #http块结束 5.1.2 测试验证 OpenResty应用开发完成之后不需要编译,可以部署后直接运行对外提供Web服务。但注意不能简单地执行“bin/openresty”,那将会使用OpenResty默认的配置文件而不是我们刚编写的配置文件。 启动应用需要使用“-c”参数,让OpenResty以指定的配置文件运行: /usr/local/openresty/bin/openresty -c "`pwd`/hello.conf" 现在就可以使用curl来验证“Hello World”应用的运行情况了: curl -v 127.0.0.1 #curl命令发送HTTP请求 curl -v 127.0.0.1/hello #总会得到“hello, world” 停止应用时同样需要加上“-c”参数: /usr/local/openresty/bin/openresty -c "`pwd`/hello.conf" -s stop ……
作者简介
罗剑锋(网名Chrono),96年就读于东北财经大学 1997年开始接触C/C++ 1998年参加计算机软件专业技术资格和水平考试,获高级程序员资质 2003年毕业于北京理工大学,获计算机专业硕士学位主要研究方向为C/C++、设计模式、高性能网络服务器开发业余爱好是阅读、旅游、欣赏音乐和电影。
-
造神:人工智能神话的起源和破除 (精装)
¥32.7¥88.0 -
硅谷之火-人与计算机的未来
¥15.5¥39.8 -
过程控制技术(第2版高职高专规划教材)
¥27.6¥38.0 -
专业导演教你拍好短视频
¥13.8¥39.9 -
系统性创新手册(管理版)
¥42.6¥119.0 -
计算机网络技术
¥25.7¥33.0 -
深入浅出软件架构
¥117.2¥186.0 -
软件设计的哲学(第2版)
¥54.0¥69.8 -
大数据技术导论(第2版)
¥28.9¥41.0 -
人工智能的底层逻辑
¥55.3¥79.0 -
剪映+PREMIERE+AIGC 短视频制作速成
¥73.5¥98.0 -
人人都能学AI
¥39.8¥68.0 -
剪映AI
¥52.0¥88.0 -
数据挖掘技术与应用
¥46.0¥75.0 -
数据采集与处理
¥36.4¥49.8 -
PLC结构化文本编程(第2版)
¥56.3¥79.0 -
中小型网络组建与管理
¥30.7¥43.0 -
上海市老年教育推荐用书:老年人智慧生活(进阶篇)
¥32.5¥45.0 -
上海市老年教育推荐用书:老年人智慧生活(初级篇)
¥29.3¥45.0 -
SOLIDWORKS中文版实用教程
¥104.9¥149.9