问题来由:
在ngx_rtmp_relay_module模块当中有个static预拉流的事件,感觉这个设计有点小巧妙且匪夷所思。试想一下,如果是自己设计会怎么做?为啥不直接弄一个定时器事件?
问题分析:
先说说 ngx_rtmp_init_queue 这个队列,nginx自身定义了ngx_posted_accept_events和ngx_posted_events俩类事件队列这是一个post事件队列,主要用来处理rtmp相关
的事件,在rtmp模块当中主要是relay和exec模块引用了这个变量。
先来分析整个事件队列的初始化,事件注册以及事件在哪调用执行。
ngx_rtmp_init_queue队列初始化
ngx_rtmp_init_queue变量在ngx_rtmp.h当中定义,在ngx_rtmp_init_process函数初始化,也就是ngx_rtmp核心module进程启动的时候初始化,nginx两个事件队列变量是在
ngx_event_proccess_init的时候初始化的。
static ngx_int_t
ngx_rtmp_init_process(ngx_cycle_t *cycle)
{
#if (nginx_version >= 1007005)
ngx_queue_init(&ngx_rtmp_init_queue);
#endif
return NGX_OK;
}
ngx_rtmp_init_queue注册事件
有两个地方注册了ngx_rtmp_in