OpenResty完全开发指南 构建百万级别并发的Web应用pdf下载

摘要适读人群 :追求高性能的Web应用研发工程师 微服务、API网关、Web应用防火墙的研发工程师 通用的HTTP/TCP/UDP应用服务研发工程师 基于OpenResty/Nginx深度定制的研发工程师 工作在Linux系统上的的运维、测试工程师 计算机编程爱好者 本书由一线技术专家基于自己的工作经验...

摘要

适读人群 :追求高性能的Web应用研发工程师 微服务、API网关、Web应用防火墙的研发工程师 通用的HTTP/TCP/UDP应用服务研发工程师 基于OpenResty/Nginx深度定制的研发工程师 工作在Linux系统上的的运维、测试工程师 计算机编程爱好者
本书由一线技术专家基于自己的工作经验精心撰写而成,主要包括OpenResty的组成、运行平台、工作语言、内部运行机制、功能接口、各种服务的配置和开发方式。
本书作者技术功底强,写作水平高,写作的图书不唯市场论,不唯风头论,只写自己一线工作经验,对于自己的技术书籍出版也从来都是一丝不苟,一心只为大家奉献优质、实用且实战的优秀技术图书!

OpenResty完全开发指南 构建百万级别并发的Web应用 作者:罗剑锋

OpenResty完全开发指南 构建百万级别并发的Web应用 出版社:电子工业出版社

OpenResty完全开发指南 构建百万级别并发的Web应用 内容简介

OpenResty 是一个基于Nginx 的高性能Web 平台,能够方便地搭建处理超高并发的动态Web 应用、Web 服务和动态网关。

与现有的其他开发语言/环境相比,OpenResty 有着高性能、高灵活性、易于学习和扩展等许多优点,近年来得到了越来越多开发者的关注,也有了很多成功的应用范例,如Adobe、Dropbox、GitHub 等知名公司都基于OpenResty 构建了自己的后端业务应用。

OpenResty 自带完善的帮助文档,开发社区也很活跃,但相关的学习资料——特别是中文资料较少。《OpenResty完全开发指南:构建百万级别并发的Web应用》基于作者多年使用OpenResty 的经验,系统地阐述了OpenResty 相关的各方面知识和要点,帮助读者快速掌握这个高效易用的Web 开发平台,进而实现HTTP/HTTPS/TCP/UDP 等多种网络应用。

《OpenResty完全开发指南:构建百万级别并发的Web应用》结构严谨、详略得当,具有较强的实用性,适合广大软件开发工程师、系统运维工程师、编程爱好者和计算机专业学生阅读参考。

OpenResty完全开发指南 构建百万级别并发的Web应用 目录

前言

第0章 导读

0.1 关于本书

0.2 读者对象

0.3 读者要求

0.4 运行环境

0.5 本书的结构

0.6 如何阅读本书

0.7 本书的源码

第1章 总论

1.1 简介

1.2 历史

1.3 组成

1.4 版本

1.5 安装

1.5.1 直接安装

1.5.2 源码安装

1.5.3 定制安装

1.6 目录结构

1.7 启停服务

1.8 组件管理工具

1.9 命令行工具

1.10 参考手册

1.11 性能对比

1.12 应用架构

1.13 总结

第2章 Nginx平台

2.1 简介

2.2 进程模型

2.3 配置文件

2.4 变量

2.5 HTTP服务

2.5.1 server配置

2.5.2 location配置

2.6 TCP/UDP服务

2.7 反向代理

2.7.1 上游集群

2.7.2 代理转发

2.8 运行日志

2.8.1 访问日志

2.8.2 错误日志

2.9 总结

第3章 Lua语言

3.1 简介

3.2 注释

3.3 数据类型

3.4 字符串

3.5 变量

3.6 运算

3.6.1 算术运算

3.6.2 关系运算

3.6.3 逻辑运算

3.6.4 字符串运算

3.6.5 注意事项

3.7 控制语句

3.7.1 语句块

3.7.2 赋值语句

3.7.3 分支语句

3.7.4 循环语句

3.8 函数

3.8.1 定义函数

3.8.2 参数和返回值

3.9 表

3.9.1 定义表

3.9.2 操作表

3.9.3 范围循环

3.9.4 作为函数的参数

3.10 模块

3.11 面向对象

3.11.1 基本特性

3.11.2 原型模式

3.11.3 self参数

3.12 标准库

3.12.1 base库

3.12.2 package库

3.12.3 string库

3.12.4 table库

3.12.5 math库

3.12.6 io库

3.12.7 os库

3.12.8 debug库

3.12.9 使用技巧

3.13 高级特性

3.13.1 闭包

3.13.2 保护调用

3.13.3 可变参数

3.14 总结

第4章 LuaJIT环境

4.1 简介

4.2 goto语句

4.3 jit库

4.4 table库

4.5 bit库

4.6 ffi库

4.7 编译为字节码

4.8 编译为机器码

4.9 总结

第5章 开发概述

5.1 应用示例

5.1.1 编码实现

5.1.2 测试验证

5.2 运行命令

5.3 目录结构

5.4 配置指令

5.5 运行机制

5.5.1 处理阶段

5.5.2 执行程序

5.5.3 定时任务

5.5.4 流程图

5.6 功能接口

5.7 核心库

5.8 应用开发流程

5.9 总结

第6章 基础功能

6.1 系统信息

6.2 运行日志

6.3 时间日期

6.3.1 当前时间

6.3.2 时间戳

6.3.3 格式化时间戳

6.3.4 更新时间

6.3.5 睡眠

6.4 数据编码

6.4.1 Base64

6.4.2 JSON

6.4.3 MessagePack

6.5 正则表达式

6.5.1 配置指令

6.5.2 匹配选项

6.5.3 匹配

6.5.4 查找

6.5.5 替换

6.5.6 切分

6.6 高速缓存

6.6.1 创建缓存

6.6.2 使用缓存

6.7 总结

第7章 HTTP服务

7.1 简介

7.2 配置指令

7.3 常量

7.3.1 状态码

7.3.2 请求方法

7.4 变量

7.4.1 读变量

7.4.2 写变量

7.5 基本信息

7.5.1 请求来源

7.5.2 起始时间

7.5.3 请求头

7.5.4 暂存数据

7.6 请求行

7.6.1 版本

7.6.2 方法

7.6.3 地址

7.6.4 参数

7.7 请求头

7.7.1 读取数据

7.7.2 改写数据

7.8 请求体

7.8.1 丢弃数据

7.8.2 读取数据

7.8.3 改写数据

7.9 响应头

7.9.1 改写数据

7.9.2 发送数据

7.9.3 过滤数据

7.10 响应体

7.10.1 发送数据

7.10.2 过滤数据

7.11 手动收发数据

7.12 流程控制

7.12.1 重定向请求

7.12.2 终止请求

7.13 检测断连

7.14 综合示例

7.15 总结

第8章 访问后端

8.1 简介

8.2 子请求

8.2.1 接口说明

8.2.2 应用示例

8.2.3 使用建议

8.3 协程套接字

8.3.1 配置指令

8.3.2 创建对象

8.3.3 超时设置

8.3.4 建立连接

8.3.5 复用连接

8.3.6 关闭连接

8.3.7 发送数据

8.3.8 接收数据

8.3.9 应用示例

8.4 DNS客户端

8.4.1 创建对象

8.4.2 查询地址

8.4.3 缓存地址

8.5 HTTP客户端

8.5.1 创建对象

8.5.2 发送请求

8.6 WebSocket客户端

8.6.1 创建对象

8.6.2 建立连接

8.6.3 关闭连接

8.6.4 复用连接

8.6.5 发送数据

8.6.6 接收数据

8.7 Redis客户端

8.7.1 创建对象

8.7.2 建立连接

8.7.3 关闭连接

8.7.4 复用连接

8.7.5 执行命令

8.7.6 管道

8.7.7 脚本

8.8 MySQL客户端

8.8.1 创建对象

8.8.2 建立连接

8.8.3 服务器版本号

8.8.4 关闭连接

8.8.5 复用连接

8.8.6 简单查询

8.8.7 高级查询

8.8.8 防止SQL注入

8.9 总结

第9章 反向代理

9.1 简介

9.2 上游集群

9.2.1 静态服务器信息

9.2.2 动态服务器信息

9.2.3 服务器下线

9.2.4 当前上游集群

9.3 负载均衡

9.3.1 使用方式

9.3.2 功能接口

9.4 总结

第10章 高级功能

10.1 共享内存

10.1.1 配置指令

10.1.2 写操作

10.1.3 读操作

10.1.4 删除操作

10.1.5 计数操作

10.1.6 队列操作

10.1.7 过期操作

10.1.8 其他操作

10.2 定时器

10.2.1 配置指令

10.2.2 单次任务

10.2.3 周期任务

10.3 进程管理

10.3.1 进程类型

10.3.2 工作进程

10.3.3 监控进程

10.3.4 特权进程

10.4 轻量级线程

10.4.1 启动线程

10.4.2 等待线程

10.4.3 挂起线程

10.4.4 停止线程

10.4.5 信号量

10.5 总结

第11章 HTTPS服务

11.1 简介

11.1.1 密码学

11.1.2 网络协议

11.2 服务配置

11.3 应用开发

11.4 基本信息

11.4.1 协议版本号

11.4.2 主机名

11.4.3 地址

11.5 加载证书

11.5.1 清除证书

11.5.2 设置证书

11.5.3 设置私钥

11.5.4 测试验证

11.6 查验证书

11.6.1 发送查询

11.6.2 通知客户端

11.7 会话复用

11.7.1 Session ID

11.7.2 Session Tickets

11.8 总结

第12章 HTTP2服务

12.1 简介

12.2 服务配置

12.3 应用开发

12.4 测试验证

12.5 总结

第13章 WebSocket服务

13.1 简介

13.2 服务配置

13.3 应用开发

13.4 总结

第14章 TCP/UDP服务

14.1 简介

14.2 配置指令

14.3 运行机制

14.3.1 处理阶段

14.3.2 执行程序

14.3.3 流程图

14.4 功能接口

14.5 应用示例

14.6 总结

第15章 结束语

附录A 推荐书目

附录B 定制OpenResty

OpenResty完全开发指南 构建百万级别并发的Web应用 精彩文摘

开发概述

由于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

本文来自奶味小仙女投稿,不代表电子书资源网立场,如若转载,请联系原作者获取。

打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
() 0
上一篇 02-14
下一篇 02-14

相关推荐

评论列表

联系我们

在线咨询: QQ交谈

邮件:admin@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信