您好!欢迎来到爱源码

爱源码

热门搜索: 抖音快手短视频下载   

令人震惊!全网第一张源代码分析全景图揭秘Nginx <影视源码>

  • 时间:2022-06-29 00:39 编辑: 来源: 阅读:290
  • 扫一扫,手机访问
摘要:令人震惊!全网第一张源代码分析全景图揭秘Nginx <影视源码>
无论是C/C++技术栈,PHP还是Java技术栈,从事后台开发的朋友一定会对nginx很熟悉。 想要深入学习nginx,阅读源代码肯定是非常重要的一部分,但毕竟nginx源代码的量也不算少。一不小心,就很容易陷入某个细节,迷失在茫茫代码海中。 如果有一张地图,可以让我们打开上帝视角,纵观全局,帮助我们快速学习整体框架结构,而不会迷失在其中,那就太好了!你有福气看到这篇文章。作者花了很多时间做这件事。我们先来看一下全图(限于平台图片的大小设置,这里只能看到一个大概的图片):选取图片下方的几个关键部分,一窥神秘的nginx。 主进程启动nginx后,进行一系列初始化,包括但不限于:命令行参数分析时间初始化日志初始化ssl初始化操作系统相关初始化一致性哈希表初始化模块号解决方案镜像核心初始化另一个最重要的初始化是由ngx_init_cycle()函数完成的,它是围绕nginx中一个非常核心的全局数据结构ngx_cycle_t进行的。 镜像函数完成几个核心初始化:配置文件分析,nginx模块的socket初始化的创建和监控。nginx核心模块组的形象nginx是一款模块化设计软件,优秀的架构设计使得nginx可以扩展很多模块。 要把这些模块一个一个描绘出来,显得有点凌乱,工作量也比较大。只选择了几个关键的核心模块进行显示:图中的每个模块都有一个支持的命令解析列表。在初始化过程中,主进程将遍历所有模块的命令列表,以解析配置文件中的命令。比如常用的ngx_http_proxy_module:图片ngx_http_core_module:图片main函数最后,根据是否可以启用多进程模型,进入ngx_master_process_cycle的多进程版本和ngx_single_process_cycle()的单进程版本 以常见的多流程版本为例。进入该功能后,首先将流程名称设置为“主流程”,然后启动各个工作子流程。 经过几层封装,发起人最后通过fork启动几个子进程:除了工作子进程,镜像还启动缓存管理进程。 之后主进程进入工作循环,周期性的更新时间和检查全局标记,根据不同的情况给子进程发送不同的信号。 图片进程的子进程启动后,进入ngx_worker_process_cycle初始化少量工作进程,然后将进程名称改为“worker process” 然后进入工作循环函数ngx_process_events_and_timers,在这个函数中主要负责:竞争互斥锁,得到锁的进程可以执行accept接受新的连接,从而处理多个进程之间的冲击效应,通过epoll异步IO模型解决网络IO事件。包括新连接事件和发生在已建立连接中的读写事件,以解决定时器队列中的定时器超时事件。定时器以红黑树方式存储图片,HTTP请求预先解决。当连接中产生数据时,工作线程在socket中读取传入的数据,按照HTTP协议格式进行解析,最后封装成一个ngx_request_t请求对象,提交求解。 nginx中HTTP请求解析的11个阶段,每个HTTP模块以挂载的形式串联,HTTP请求解析以流水线的方式进行。nginx将HTTP请求的解析分为11个阶段。 typedef enum { NGX _ HTTP _ POST _ READ _ PHASE = 0,NGX_HTTP_SERVER_REWRITE_PHASE,NGX_HTTP_FIND_CONFIG_PHASE,NGX_HTTP_POST_REWRITE_PHASE,NGX_HTTP_PREACCESS_PHASE,NGX_HTTP_ACCESS_PHASE,NGX_HTTP_POST_ACCESS_PHASE,NGX_HTTP_PRECONTENT_PHASE,NGX_HTTP_CONTENT_PHASE,NGX _ HTTP _ LOG每个阶段(部分阶段预留,无挂载)允许挂载多个模块,一个模块也可以挂载到多个阶段。 因此,第一次安装的存储结构是二维数组的形式。 但是,在初始化期间,ngx_http_init_phase_handlers函数会将二维数组转换为一维数组。 下图是nginx中模块的挂载情况:图片全景。最后来看一下全貌:图片总结nginx不仅是一款优秀的高性能web服务器,也是C/C++技术栈的学生很好的学习对象。其良好的架构设计,软代码风格,经典的编程技术,都值得仔细研究。 但由于作者水平和时间有限,虽然称之为全景,但仍然无法涵盖nginx的方方面面。欢迎读者朋友们留言,让这一观点日臻完善。谢谢你。


  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【技术支持|常见问题】1502企业站群-多域名跳转-多模板切换(2024-04-09 12:19)
【技术支持|常见问题】1126完美滑屏版视频只能显示10个(2024-03-29 13:37)
【技术支持|常见问题】响应式自适应代码(2024-03-24 14:23)
【技术支持|常见问题】1126完美滑屏版百度未授权使用地图api怎么办(2024-03-15 07:21)
【技术支持|常见问题】如何集成阿里通信短信接口(2024-02-19 21:48)
【技术支持|常见问题】算命网微信支付宝产品名称年份在哪修改?风水姻缘合婚配对_公司起名占卜八字算命算财运查吉凶源码(2024-01-07 12:27)
【域名/主机/服务器|】帝国CMS安装(2023-08-20 11:31)
【技术支持|常见问题】通过HTTPs测试Mozilla DNS {免费源码}(2022-11-04 10:37)
【技术支持|常见问题】别告诉我你没看过邰方这两则有思想的创意广告! (2022-11-04 10:37)
【技术支持|常见问题】你正确使用https了吗? [php源码](2022-11-04 10:37)

联系我们
Q Q:375457086
Q Q:526665408
电话:0755-84666665
微信:15999668636
联系客服
企业客服1 企业客服2 联系客服
86-755-84666665
手机版
手机版
扫一扫进手机版
返回顶部