nginx 의 master 와 worker 프로 세 스 간 의 통신
2584 단어 nginx
master 프로 세 스 가 워 커 프로 세 스에 보 낼 때마다 다음 과 같은 구조 로 패 키 징 을 완성 합 니 다.
typedef struct {
ngx_uint_t command;
ngx_pid_t pid;
ngx_int_t slot;
ngx_fd_t fd;
} ngx_channel_t;
네 명의 구성원 은 각각 명령, worker 프로 세 스 의 pid, worker 프로 세 스 의 slot (ngx processes 배열 의 아래 표 시 됨), 파일 설명 자 를 표시 합 니 다.worker 프로 세 스 는 이 구조 데 이 터 를 받 은 후 command 를 판단 하여 해당 하 는 동작 을 합 니 다.
master 프로 세 스 는 SIGCHLD 신 호 를 처리 하 는 함수 ngxreap_children 에 서 는 워 커 프로 세 스에 채널 을 닫 는 명령 을 보 냅 니 다.
worker 프로 세 스 가 ngx 를 호출 하고 있 습 니 다.worker_process_init 함수 시, ngxadd_channel_이 벤트 는 채널 을 epoll 이벤트 처리 모듈 에 넣 습 니 다.
if (ngx_add_channel_event(cycle, ngx_channel, NGX_READ_EVENT,
ngx_channel_handler)
== NGX_ERROR)
{
/* fatal */
exit(2);
}
master 프로 세 스 가 보 낸 명령 을 받 으 면 ngx 를 호출 합 니 다.channel_handler 처리, ngxchannel_handler 는 주로 뭘 하 죠? switch (ch.command) {
case NGX_CMD_QUIT:
ngx_quit = 1;
break;
case NGX_CMD_TERMINATE:
ngx_terminate = 1;
break;
case NGX_CMD_REOPEN:
ngx_reopen = 1;
break;
case NGX_CMD_OPEN_CHANNEL:
ngx_log_debug3(NGX_LOG_DEBUG_CORE, ev->log, 0,
"get channel s:%i pid:%P fd:%d",
ch.slot, ch.pid, ch.fd);
ngx_processes[ch.slot].pid = ch.pid;
ngx_processes[ch.slot].channel[0] = ch.fd;
break;
case NGX_CMD_CLOSE_CHANNEL:
ngx_log_debug4(NGX_LOG_DEBUG_CORE, ev->log, 0,
"close channel s:%i pid:%P our:%P fd:%d",
ch.slot, ch.pid, ngx_processes[ch.slot].pid,
ngx_processes[ch.slot].channel[0]);
if (close(ngx_processes[ch.slot].channel[0]) == -1) {
ngx_log_error(NGX_LOG_ALERT, ev->log, ngx_errno,
"close() channel failed");
}
ngx_processes[ch.slot].channel[0] = -1;
break;
}
받 은 명령 유형 에 따라 상응하는 동작 을 취한 다.
전체 통신 의 과정 은 이렇다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
간단! Certbot을 사용하여 웹 사이트를 SSL(HTTPS)화하는 방법초보자가 인프라 주위를 정돈하는 것은 매우 어렵습니다. 이번은 사이트를 간단하게 SSL화(HTTP에서 HTTPS통신)로 변경하는 방법을 소개합니다! 이번에는 소프트웨어 시스템 Nginx CentOS7 의 환경에서 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.