温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
OpenResty
完全
开发
指南
构建
百万
级别
并发
Web
应用
内 容 简 介 OpenResty 是一个基于 Nginx 的高性能 Web 平台,能够方便地搭建处理超高并发的动态 Web 应用、Web 服务和动态网关。与现有的其他开发语言/环境相比,OpenResty 有着高性能、高灵活性、易于学习和扩展等许多优点,近年来得到了越来越多开发者的关注,也有了很多成功的应用范例,如 Adobe、Dropbox、GitHub 等知名公司都基于 OpenResty 构建了自己的后端业务应用。OpenResty 自带完善的帮助文档,开发社区也很活跃,但相关的学习资料特别是中文资料较少。本书基于作者多年使用 OpenResty 的经验,系统地阐述了 OpenResty 相关的各方面知识和要点,帮助读者快速掌握这个高效易用的 Web 开发平台,进而实现 HTTP/HTTPS/TCP/UDP 等多种网络应用。本书结构严谨、详略得当,具有较强的实用性,适合广大软件开发工程师、系统运维工程师、编程爱好者和计算机专业学生阅读参考。未经许可,不得以任何方式复制或抄袭本书之部分或全部内容。版权所有,侵权必究。图书在版编目(CIP)数据 OpenResty 完全开发指南:构建百万级别并发的 Web 应用/罗剑锋著.北京:电子工业出版社,2018.9 ISBN 978-7-121-34896-9.O.罗.互联网络网络服务器程序设计.TP368.5 中国版本图书馆 CIP 数据核字(2018)第 188129 号 策划编辑:孙学瑛 责任编辑:牛 勇 印 刷:装 订:出版发行:电子工业出版社 北京市海淀区万寿路 173 信箱 邮编 100036 开 本:787980 1/16 印张:14.25 字数:317 千字 版 次:2018 年 9 月第 1 版 印 次:2018 年 9 月第 1 次印刷 定 价:69.00 元 凡所购买电子工业出版社图书有缺损问题,请向购买书店调换。若书店售缺,请与本社发行部联系,联系及邮购电话:(010)88254888,88258888。质量投诉请发邮件至 ,盗版侵权举报请发邮件至 。本书咨询联系方式:010-51260888-819,。前言 OpenResty 完全开发指南:构建百万级别并发的 Web 应用 III 前言 随感 本书肇始于三年多前我的Nginx 模块开发指南一书。最初是以书末的附录形式出现,只有短短的几页,粗略地介绍了 OpenResty 的核心组件 ngx_lua。连我自己也没有想到,几年后的今天它竟然“脱胎换骨”,进化成了一本颇具规模的正式图书。写作本书还是有感于目前国内技术书刊市场的现状。十几二十几年前只有少数资深专家掌握核心技术,通过著书立说的方式来分享知识,普惠大众。但随着互联网的高速发展,知识的获取方式变得越来越简单了,任何人都可以在网上轻松地查找到所需的资料,也可以在网上很容易地发表文章。书曾经被誉为“进步的阶梯”“精神的食粮”已经不是那么重要了。另一方面,互联网的普及也降低了书的严肃性和出版门槛。个人“恶意推测”,也许是为了“图省事”或者“赚快钱”,有相当多的人只是把若干博客文章集合在一起,再加以少量修改就“攒”成了一本书。这种“乱炖”“杂烩”形式的书籍拼凑的痕迹十分明显,缺乏内在的逻辑和连贯性,不过凭借着网络上积累的“人气”也能够获得不错的销量,但在我看来实在是对读者的不尊重和不负责。一个极端的例子是前段时间偶然遇到的名为开发实战的书,其粗制滥造程度简直是“超乎想象”,“不料,也不信竟会凶残到这地步”几乎 90%的内容都是原封不动地拷贝网络上现成的材料,再有就是直接复制数十页全无注释的杂乱代码,通篇看下来可能只有前言是“原创”,着实是“钦佩”该书作者厚颜无耻的“功力”。原文出自鲁迅记念刘和珍君。前言 OpenResty 完全开发指南:构建百万级别并发的 Web 应用 IV单纯地感慨“世风日下”“人心不古”是没有用的,我所能做的,就是尽自己“微茫”的努力,写出一些无愧于己于人的文字。关于OpenResty 有这样一种说法:“Nginx 是网络世界里的操作系统,而 OpenResty 则是 Nginx 上的Web 服务器”。Nginx 在 Web Server 业内的领军地位早已经得到了公认,是高性能服务器的杰出代表。它采用 C 语言开发,能够跨平台运行,把性能挖掘优化技术发挥到了极致。正因为如此,Nginx也很自然地成为了一个超越原生操作系统的开发平台,程序员可以完全无视底层系统之间的差异,在 Nginx 的框架里调用丰富的数据结构和功能接口,开发出高性能高可移植的各种应用程序。但基于 Nginx 开发主要使用的语言是 C/C+,开发难度高周期长,虽然没有达到“望而生畏”的程度但亦不远矣。好在 OpenResty 应运而生,在 Nginx 里嵌入了 LuaJIT 环境和Lua 语言,就如同给裸系统添加了一个高效易用的 Shell,瞬间就让 Nginx 开发的难度直线下降,降低到了普通的心智模型可以理解掌握的水平。早期 OpenResty 对于自身的定位主要还是 HTTP Server(其实也是受到 Nginx 的限制),可以利用“胶水语言”Lua 来操纵 Nginx,灵活定制业务逻辑,方便快捷地搭建出超高并发的各种 Web 服务,从而节约时间和人力成本。多年来的实践证明,这方面它的确工作得非常出色。近两年 OpenResty 的发展开始加速,支持了 TCP/UDP 协议,扩充了众多的专用库、应用框架以及外围工具,逐渐形成了一个比较独立自洽的生态体系。虽然 Nginx 仍然是核心,但看得出 OpenResty 有淡化自身“Nginx Bundle”色彩的趋势,力图成为一个更伟大的存在。随着软件基金会和商业公司的成立,OpenResty 获得了前所未有的成长动力。“路远,正未有穷期”,在此借本书送上诚挚的祝福与期待。通常来说 Nginx 适合运行单线程的 I/O 密集型应用,但实际上它也可以使用多线程技术运行 CPU密集型应用。前言 OpenResty 完全开发指南:构建百万级别并发的 Web 应用 V致谢 首先要感谢 Nginx 的作者 Igor Sysoev 和 OpenResty 的作者 agentzh,正是因为他们多年来持续无私的奉献,我们才能够拥有如此强大易用的 Web Server。接下来我要感谢父母多年来的养育之恩,感谢妻子和两个可爱的女儿(“点心”组合)在生活中的陪伴,愿你们能够永远幸福快乐。我也要感谢读者选择本书,希望读者能从中汲取有用的知识,让 OpenResty 成为工作中的得力助手。您的朋友 罗剑锋 2018 年 7 月 18 日 于 北京 798 园区 目录 OpenResty 完全开发指南:构建百万级别并发的 Web 应用 VI 目录 第 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 目录 OpenResty 完全开发指南:构建百万级别并发的 Web 应用 VII3.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 目录 OpenResty 完全开发指南:构建百万级别并发的 Web 应用 VIII6.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