电子书:《Nginx完全开发指南:使用C_C和OpenResty》

[复制链接]
查看174 | 回复1 | 2019-12-12 14:03:21 | 显示全部楼层 |阅读模式

《Nginx完全开发指南:使用C_C和OpenResty》_1

《Nginx完全开发指南:使用C_C和OpenResty》_1

《Nginx完全开发指南:使用C_C和OpenResty》_2

《Nginx完全开发指南:使用C_C和OpenResty》_2

《Nginx完全开发指南:使用C_C和OpenResty》_3

《Nginx完全开发指南:使用C_C和OpenResty》_3


内容简介:

ginx
完全开发指南
使用C、C++和 Openresty
罗剑锋著
電子工棠出版社
Publishing House of Electronics Industry
北京 EIJING
内容简介
Nginx是著名的Web服.务.器,性能优异,运行效宰远超传统的 Apache、 Tomcat,广泛应用于guo
内外诸多顶级互联网公可
Nginx的一个突出特点是其灵活优秀的模块化架构,可以在不修改核心的前提下增加任意功自
自2004年发布至今,已经拥有百余个官方及非官方的功能模块(如 proxy、 mysql、 redis、rtmp、lua
等),使得 Nginx成长为了一个近乎“全能”的服.务.器软件
Nginx功能强大,架构复杂,学习、维护和开发的门植较高。为了帮助读者跨越这一障碍,本书
深入最新的 Nginx源码( Stable1.12.0),详细剖析了模块体系、动态插件、功能框架、_进.程_模型、事
件驱动、线程池、TCP/UDP/HTTP处理等Nginx核心运行机制,在此基础上讲解如何使用C、C+
Lua, inscript等语言来增强扩展 Nginx,让任何人都能够便捷、轻松地开发和定制 Nginx,进而应
用到自己的实际工作中,创造出更多的价值
本书结构严谨、脉络清晰、论述精确、详略得当、图文并茂,值得广大软件开发工程师、系统运
维工程师和编程爱好者拥有
不得以任何方式复制或抄袭本书之部分或全部内容
侵权必究
图书在版编目(CIP)数据
Nginx完全开发指南:使用C、C++和 Openresty/罗剑锋著.一北京:电子工业出版社,2017.6
ISBN978-7-121-31457-5
1.①N…1.①の罗….①互联网络ー网络服.务.器一程序设计一指南②C语言一程序设计一指南
RN.①TP368.5-622TP312.8-62
中guo版本图书馆CIP数据核字(2017)第094580号
策划编辑:孙学瑛
责任编辑:安
印刷:北京京科印刷有限公司
装订:北京京科印刷有限公司
出版发行:电子工业出版社
京市海淀区万寿路173信箱部编:100036
开本:787x9801/16印张:39,75字数:901千字
版次:2017年6月第1版
印次:2017年6月第1次印刷
定价:9900元
凡所购买电子工业出版社图书有缺损问题,请向购买书店调换。若书店售缺,请与本社发行部联系
联系及邮购电话010)88254888,882588
质量投诉请发邮件至zls@phei.com.cn,盗版侵权举报请发邮件至dbq(aphei.com.cn
本书咨询联系方式:010-5126088-819,faq(@phei.com.cn
最早接触 Nginx大概是在2011年,面对着一个全新的Web服.务.器,和大多数人一样最
初我也是一片茫然,能找到的参考资料十分有限,安装、配置、运行几乎都是“摸着石头过河”
犯过许多低级错误
随着对 Nginx逐渐熟恐,它的高并发处理能力给我留下了深刻的印象,作为一个开源软
件的爱好者,很自然地想要探究一下它的内部工作原理。我由此开始了对 Nginx源码的钻研
之路,中间经过了很多的艰辛曲折,走过不少的弯路
最常用的工作语言是C+,所以在阅读 Nginx源码时也总以C++的面向对象方式来思
考和理解,以对象作为切入点记笔记、画UML:从最简单的ngx_tt、 ngx array t入
手,然后到 ngx request t、 ngx upstream t等复杂的结构,再围绕着这些对象研究相
关的功能函数和处理流程,理代码逻辑的同时也摸素着使用C++编写 Nginx模块的方法
逐新积累了一些用起来颇为順手的小工具一一当然还是比较初级的形式
三年多前,我被调到了新的工作岗位,需要重度使用
开发,这让我以前的零散积
终于有了用武之地。那段时间里使用c/C++陆续做了很多东西,也借着机会重新优化了原
有的工具代码
繁忙的工作之余,我有了种进一步整理经验的迫切感,因为只有系统完整地分享这些知识
才能让更多的人基于 Nginx二次开发,让 Nginx更好地为网络世界服务
同一时间,市面上也出现了一些 Nginx开发相关的资料、书籍,但在我看来却有“粗制
濫造”之嫌:行文混乱,“车轱辘话”“口头禅”满天飞,甚至大段照抄指令说明,还有对源码
的曲解,未免有点儿“误人子弟”,读起来实在是难受。终于,在“忍无可忍”的心态之下
我动起了写作本书的念头
经过近一年的努力,现在这本书终于呈现在了读者面前,结构上基本反映了我学习研究
qinx时的心路历程,从最初的“一无所知”起步,逐渐深入到定制开发的层次,希望能与
读者“心有威戚焉
Nginx随感
毫无疑问, Nginx是目前这个星球上所能获得的最强劲的Web服.务.器(没有之一),同卧
也是目前最成熟、最优秀的TCP/HTTP服.务.器开发框架
Nginx资源消耗低,并发处理性能高,配置灵活,能够连接CGエ、PHP、 MYSQL、 Memcached
等多种后端,还有着出色的负载均衡能力,可以整合封装各种 service,构建稳定高效的服
务。如今 Nginx已经成为了网站架构里不可或缺的关键组件,广泛应用于guo内外许多大型T
企业。每一个繁忙的网站背后,可能都有 Nginx默默工作的身影
在 Nginx出现之前,使用C/C++开发eb服.务.器是项比较“痛苦”的工作,虽然有很多
网络程序库可以使用(例如asio、1 ibevent、 thrift等),但它们通常只关注较底层的基
础功能实现,离成熟的“框架”相距甚远,不仅开发过程烦琐低效,而且程序员还必须要处理
配置管理、_进.程_间通信、协议解析等许多Neb服务之外的其他事情,才能开发出一个较为完
善的服.务.器程序。但即使开发出了这样的服.务.器,通常性能上也很难得到保证,会受到程序库
和开发者水平等因素的限制一很长一段时间里,C/C++在Web服.务.器領域都没有大展拳脚的
Nginx的横空出世为eb服.务.器开辟了一个崭新的天地,它搭建了一个高性能的服.务.器
开发框架,而且是一个完整的、全功能的服.务.器。模块化的架构设计很好地分离了底层支撑模
块和上层逻辑模块,底层模块处理了配置、并发等服.务.器的外围功能,核心支撑模块定义了主
体的TCP/HTTP处理框架。开发者可以把大部分精力集中在上层的业务功能实现上,再也
必去为其他杂事而分心,提高了软件的开发效率
在 Nginx框架里,C/C++程序员可以尽情发挥自己的专长,充分利用 Nginx无阻塞处理
的优势,打造出高质量的eb应用服.务.器,与其他系统一较高下
Nginx和C/C++
gor Syste选择用C语言(准确地说是 ANSI C)来实现 Nginx肯定是经过了认真
Nginx完全开发指南:使用C、C++和 Openresty
的考虑
作为与UNIX一同诞生的编程语言,C语言一直是系统级编程的首选。和其他高级语言相
比,它简单可靠,更接近计算机底层硬件,运行效率更高。指针更是C语言的一大特色,善用
指针能够完成许多其他语言无法完成的工作
以C语言实现的 Nginx没有“虚拟机”的成本,省略了不必要的中间环节,直接操纵计
算机硬件,从根本上提高了web服.务.器的处理能力。虽然C语言不直接支持面向对象,但 Nginx
灵活运用了指针,采用结构体+函数指针的形式,达到了同样的效果,从而使软件拥有了良好
的结构
C++是仅次于C的系统級编程语言,在兼容C的同时又増加了类、异常、模板等新特性
还支持面向对象、泛型、函数式、模板元等多种编程范式,可以说是计算机语言里的一个“庞
然大物”。C++的特性很多,有的也很好用,但总体上的确比较复杂,易学难精,容易被误用
和溢用,导致低效、难维护的代码,我想这可能是 Igor Sysoev放弃使用C++的一个重要原
另一个可能的原因是C语言本身已经非常稳定,几十年来没有太大的变动,在各个系统里
都支持得非常好。而C++在1998年オ有了第一个标准,并且现在还在发展之中,语言特性还
不够稳定(例如 export、 register等曾经的关键字在C++11里就已经被废弃),许多编译
器对C++的支持程度也有差异,这与 Nginx的高可移植性目标明显不符
但C++毕竟还是有很多的优点,类可以更好地封装信息、异常简化了错误处理、模板能够
在编译期执行类型计算。在C+-11标准颁布之后,C++更是几乎变成了一门“全新”的语言
auto/ decltype/nul1ptr/ except等新关键字増强了语言的描述能力,标准库也扩充
了相当多的组件,易用性和稳定性都大大提升
在 Nginx里使用C++时要对C++的长处和不足有清醒的认识,避免多层次继承、虚函数
等影响效率的编程范式,只使用经过充分验证的、能够切实提高开发效率和性能的语言特性和
库,避免华而不实的技术炫耀,尽量做到像 Nginx源码那样质朴踏实。只有这样,才能够发
挥出1+1>2的作用,让 Nginx从
得到更进一步的发展动力
Nginx和 Openresty
多年以前 Nginx开发使用的语言只能是c和C++,而现在,越来越多的开发者逐渐转向
了 Openresty,使Lua搭建高并发、高性能、高扩展性的 Web Server
我接触 Openresty的时间并不算很长,大约在四年左右。由于C/C++程序员“天生的做
Nginx完全开发指南:使用C、C++和 Openrest

#############################################


回复

使用道具 举报

厮守一季斑 | 2019-12-21 19:56:23 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则