Nginx

Http 11 请求阶段

Post_read

Server_rewrite

Find_config

Rewrite

Post_rewirte

Pre_access

Access

Post_access

Try_files

Content

Log

 

没一个阶段都有一个checker方法和一个handler方法,checker方法会调用handler方法

 

Checker 方法会调用http_request , handler方法,然后查看handler返回值

  • Ok, 下一个阶段
  • Again,Done停留在此handler
  • Declined, 下一个handler
  • Error, finalize

没个模块负责在某个阶段比如post-configuration 假如自己的handler

 

Web服务器

建立连接 调用init_connection

  • 读事件加入到定时器
  • 读事件handler设置为init_request
  • 写事件为empty_handler

当有读事件来临时候,运行init_request

  • 初始化http_request, assign connectiondata字段
  • 找到监听地址的server配置,设置请求的http配置项
  • Process_request_line
  • 设置读事件handler process_request_line

接收完请求行后,设置read event handler为process_request_header用于接收头部

  • Parse header line 来解析头部
  • 根据头部的host设置server的配置
  • 解析完所有头部 process_request 开始11阶段的handler

Process_request

  • 设置写handlerrequest_handler, 读为block
  • 调用各个phrasechecker函数,执行handler,返回ok直接return

Request_handler,process_request无法一次处理完,handler返回ok,则表示要等待

  • 是否可写,继续调用 各个handler之行
  • 可读,block-reading

Run_posted_reqeust

  • 处理请求的子请求,调用write_event_handler

Ngx_http_header 发送头部到客户端

  • 依次调用各个模块的send_header方法
  • 最后调用的send_headerheader_filter方法负责发送头部,如果一次没有发送完成,则有finalize_request继续发送完成

Ngx_output_filter发送包体到客户端

  • 一次调用各个过滤包体的方法
  • 最后调用write_filter方法发送包体,如需减速则设置事件到计时器中

结束请求

  • Close connection
  • Free request
  • Finalize request : 如果是子请求结束,会激活父请求继续执行

 

反向代理

解决问题:

  1. 适配协议,下游http,上游可能是tcp
  1. 上下游网速差距过大 
  2. 节省内存,同一个buffer块既用于接收缓存,发送消息,写入文件

  ngx_http_upstream_t为反向代理的上下文

 

启动upstream

  • Create_request准备向上游发送请求
  • 设置upstream_clean_uprequestclean_up链表
  • 和上游服务器建立连接

 

上游服务器建立连接ngx_http_upstream_connect

  • 建立非阻塞连接,如果当时成功就发送请求upstream_send_request,如果不成功,就将写事件放到epoll模型中
  • 放到epoll中事件读写handler设置为ngx_http_upstream_handler, handler会调用upstream中的读写handler
  • upstream上下文中的write_handler = upstream_send_request_handler, read_handler=upstreamd_process_header

 

发送请求到上游服务器

  • 调用ngx_outupt_chain向上游服务器发送请求,如果一次没有发送完,会将剩余内容记录下来,将写事件加到epoll模型中继续发送
  • 发送完后,如果读事件ready会直接调用upstreamd_process_header接受头部

解析上游的响应ngx_http_upstream_process_header

  • Process_header将结果存入header_in buffer
  • Ngx_http_upstream_process_header header 存入header_out
  • ngx_http_upstream_send_response发送包头
  • process_body_in_memory接受包体,处理包体input_filter

 

转发包头和包体,以上游网速优先来转发

Ngx_event_pipt_t 为转发包体上下文

  •  ngx_http_upstream_send_response发送包头,同时设置上游读事件和下游写事件handler分别为ngx_http_upstream_process_upstream, ngx_http_upstream_process_downstream
  • 最终调用 ngx_event_pipe_read_upstream处理上游的读,ngx_event_pipe_write_to_downstream处理下游的写

结束upstream请求

  • 不会立马结束,会调用ngx_http_stream_next在尝试几次
  • 重试过后仍然失败,调用ngx_http_upstream_finalize_request结束请求
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值