nginx 학습 노트 5 (nginx 의 이벤트 모듈 정의)
7346 단어 nginx 학습
다음은 nginx 프레임 워 크 에서 이벤트 처리 와 관련 된 모듈 을 설명 합 니 다.
1. ngxevents_module
ngx_events_module 은 핵심 모듈 중의 하나 이다.그동안 핵심 모듈 의 뜻 을 잘 몰 랐 는데, 지금 생각해 보면 이벤트 모듈 의 핵심 모듈 은 이벤트 와 관련 된 첫 번 째 모듈 이 어야 한다.이 모듈 은 실제 사건 업 무 를 처리 하지 않 고 기본 적 인 초기 화 작업 을 할 것 이다.ngx_events_module 의 정 의 는 다음 과 같다.
ngx_module_t ngx_events_module = {
NGX_MODULE_V1,
&ngx_events_module_ctx, /* module context */
ngx_events_commands, /* module directives */
NGX_CORE_MODULE, /* module type */
NULL, /* init master */
NULL, /* init module */
NULL, /* init process */
NULL, /* init thread */
NULL, /* exit thread */
NULL, /* exit process */
NULL, /* exit master */
NGX_MODULE_V1_PADDING
};
static ngx_command_t ngx_events_commands[] = {
{ ngx_string("events"),
NGX_MAIN_CONF|NGX_CONF_BLOCK|NGX_CONF_NOARGS,
ngx_events_block,
0,
0,
NULL },
ngx_null_command
};
static ngx_core_module_t ngx_events_module_ctx = {
ngx_string("events"),
NULL,
NULL
};
상기 프로그램 에서 볼 수 있 듯 이 이 모듈 에서 하 는 일 은 매우 제한 되 어 있 습 니 다. ngxevents_module_ctx 의 initconf 와 createconf 방법 은 모두 비어 있다.그리고 ngxevents_block 에 서 는 다른 이벤트 모듈 을 호출 하여 이벤트 의 설정 을 분석 하고 다른 이벤트 모듈 각자 의 방법 으로 설정 항목 구조 체 를 구축 하고 채 웁 니 다.부분 핵심 코드 는 다음 과 같 습 니 다.
//conf ngx_conf_handler conf = confp[ngx_modules[i]->ctx_index]; conf ngx_cycle_s->conf_ctx[],
// conf ngx_cycle_s conf_ctx , ngx_cycle_s conf_ctx[ngx_events_module=>index] ctx
*(void **) conf = ctx;
for (i = 0; ngx_modules[i]; i++) {
if (ngx_modules[i]->type != NGX_EVENT_MODULE) {
continue;
}
m = ngx_modules[i]->ctx;
if (m->create_conf) {
(*ctx)[ngx_modules[i]->ctx_index] = m->create_conf(cf->cycle);
if ((*ctx)[ngx_modules[i]->ctx_index] == NULL) {
return NGX_CONF_ERROR;
}
}
}
// cf, event{} ,
pcf = *cf;
cf->ctx = ctx;
cf->module_type = NGX_EVENT_MODULE;
cf->cmd_type = NGX_EVENT_CONF;
rv = ngx_conf_parse(cf, NULL);// cf ctx NGX_EVENT_MODULE create_conf event{}
*cf = pcf; // event{} ,
if (rv != NGX_CONF_OK) {
return rv;
}
for (i = 0; ngx_modules[i]; i++) {
if (ngx_modules[i]->type != NGX_EVENT_MODULE) {
continue;
}
m = ngx_modules[i]->ctx;
if (m->init_conf) {
rv = m->init_conf(cf->cycle, (*ctx)[ngx_modules[i]->ctx_index]);
if (rv != NGX_CONF_OK) {
return rv;
}
}
}
2. ngxevent_core_모듈 이벤트 모듈
ngx_event_core_module 은 이벤트 모듈 에서 첫 번 째 순서 입 니 다.이 모듈 은 이벤트 의 많은 설정 항목 에 응답 하고 초기 화 작업 을 완료 하여 뒤의 실제 이벤트 처리 모듈 을 준비 합 니 다.이 모듈 의 정 의 는 다음 과 같다.
여기 ngxevent_process_init 함 수 는 실제로 많은 일 을 했 습 니 다. 이 함 수 는 하위 프로 세 스 를 만 들 때 호출 됩 니 다.구체 적 으로 책 설명 을 참조 하 다.
3. ngxepoll_모듈 모듈
이벤트 의 use 설정 항목 이 epoll 을 선택 하면 뒤에서 ngx 에 대응 합 니 다.epoll_module 모듈 의 실행.이 모듈 의 정 의 는 다음 과 같다.
// ngx_event_core_commands ngx_http_core_commands ngx_stream_commands ngx_http_core_commands ngx_core_commands ngx_mail_commands
static ngx_command_t ngx_event_core_commands[] = {
// worker
// , worker TCP , connections , 9.3.3
{ ngx_string("worker_connections"),
NGX_EVENT_CONF|NGX_CONF_TAKE1,
ngx_event_connections,
0,
0,
NULL },
// 。 use [kqueue | rtsig | epoll | dev/poll | select | poll | eventport] linux select poll epoll
//freebsd kqueue,LINUX
//
{ ngx_string("use"),
NGX_EVENT_CONF|NGX_CONF_TAKE1,
ngx_event_use,
0,
0,
NULL },
// TCP , TCP
// available 。 epoll , , accept
{ ngx_string("multi_accept"),
NGX_EVENT_CONF|NGX_CONF_FLAG,
ngx_conf_set_flag_slot,
0,
offsetof(ngx_event_conf_t, multi_accept),
NULL },
//accept_mutex on|off accept , worker 、 worker TCP
// , TCP , worker 。
{ ngx_string("accept_mutex"),
NGX_EVENT_CONF|NGX_CONF_FLAG,
ngx_conf_set_flag_slot,
0,
offsetof(ngx_event_conf_t, accept_mutex),
NULL },
//accept_mutex_delay time, accpt_mutex on, worker accept , accept ,
// , time 。
// accept_mutex , accept_mutex_delay
{ ngx_string("accept_mutex_delay"),
NGX_EVENT_CONF|NGX_CONF_TAKE1,
ngx_conf_set_msec_slot,
0,
offsetof(ngx_event_conf_t, accept_mutex_delay),
NULL },
//debug_connection 1.2.2.2 IP , debug 。 error_log
// IP TCP debug
{ ngx_string("debug_connection"),
NGX_EVENT_CONF|NGX_CONF_TAKE1,
ngx_event_debug_connection,
0,
0,
NULL },
ngx_null_command
};
//ngx_event_core_module create_conf init_conf , TCP ,
// ngx_event_actions_t
ngx_event_module_t ngx_event_core_module_ctx = {
&event_core_name,
ngx_event_core_create_conf, /* create configuration */
ngx_event_core_init_conf, /* init configuration */
{ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }
};
/*
Nginx ( 9 ) 、 , :ngx_epoll_module、ngx_kqueue_module、
ngx_poll_module、ngx_select_module、ngx_devpoll_module、ngx_eventport_module、ngx_aio_module、ngx_rtsig_module
Windows ngx_select_module 。 ngx_event_core_module , 9 1 Nginx 。
*/
ngx_module_t ngx_event_core_module = {
NGX_MODULE_V1,
&ngx_event_core_module_ctx, /* module context */
ngx_event_core_commands, /* module directives */
NGX_EVENT_MODULE, /* module type */
NULL, /* init master */
ngx_event_module_init, /* init module */ //
ngx_event_process_init, /* init process */ // ngx_worker_process_init
NULL, /* init thread */
NULL, /* exit thread */
NULL, /* exit process */
NULL, /* exit master */
NGX_MODULE_V1_PADDING
};
ngx_epoll_init, ngx_epoll_addevent, ngx_epoll-process_이벤트 중 대응 하 는 epollcreate,epoll_ctl, epoll_wait 이 epoll 의 시스템 호출 함수 입 니 다.다음은 ngxepoll_process_이벤트 구현 프로그램:
4. 567913. 본 모듈 은 사건 의 배포 만 책임 지고 구체 적 인 업무 논리 처 리 는 각 읽 기와 쓰기 사건 에 대응 하 는 handler 방법 에 있다 는 것 을 알 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Nginx 업로드 파일 크기 제한 (온라인 문제)최근 에 새로운 시스템 이 출시 되 었 는데 어제 사용자 가 문 제 를 반 영 했 습 니 다. 파일 이 99% 에 올 라 간 후에 움 직 이지 않 아서 파일 을 올 릴 수 없습니다. 처음에 브 라 우 저 호환성 문제...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.