ngx_event_accept
void
ngx_process_events_and_timers(ngx_cycle_t *cycle)
{
ngx_uint_t flags;
ngx_msec_t timer, delta;
......
delta = ngx_current_msec;
// 处理事件ngx_epoll_process_events
(void) ngx_process_events(cycle, timer, flags);
delta = ngx_current_msec - delta;
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
"timer delta: %M", delta);
// 这个是ACCEPT 事件队列指针
if (ngx_posted_accept_events) {
ngx_event_process_posted(cycle, &ngx_posted_accept_events); //--------->此处处理ACCEPT事件
}
......
}
// 事件处理函数
void
ngx_event_process_posted(ngx_cycle_t *cycle,
ngx_thread_volatile ngx_event_t **posted)
{
ngx_event_t *ev;
for ( ;; ) {
ev = (ngx_event_t *) *posted;
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
"posted event %p", ev);
if (ev == NULL) {
// 处理完事件后退出循环
return;
}
// 从ngx_posted_accept_events 事件队列上取下事件
ngx_delete_posted_event(ev);
// 调用事件处理函数处理事件,这里是调用ngx_event_accept处理ACCEPT事件
ev->handler(ev);
}
}
// 暂时不看ngx_event_accept的处理流程,先看看事件的结构
struct ngx_event_s {
void *data;
unsigned write:1; // 写事件
unsigned accept:1; // accept 事件
/* used to detect the stale events in kqueue, rtsig, and epoll */
unsigned
NGX --- ACCEPT事件处理
最新推荐文章于 2021-05-12 22:59:08 发布
本文深入探讨了NGINX中ACCEPT事件的处理流程,从ngx_process_events_and_timers函数开始,讲解了如何处理ACCEPT事件,包括ngx_event_process_posted函数的使用以及ngx_event_accept处理函数的注册。文中提到了事件结构ngx_event_s,特别是accept字段和handler钩子函数,指出ngx_event_process_init函数在初始化阶段为ACCEPT事件分配资源并设置处理函数。
摘要由CSDN通过智能技术生成