Nginx 소스 코드 초기 탐지 데이터 구조 - 링크 데이터 구조

ngx_event_t 이벤트 와 ngxconnection_t 연결 은 TCP 연결 을 처리 하 는 기본 데이터 구조 입 니 다.Nginx 처리 요청 연결 은 세 가지 주요 데이터 구조 가 있 습 니 다. ngxcycle_t 전역 변수 구조 체, ngxconnection_t 네트워크 링크 구조 체, ngxlistening_t 네트워크 감청 구조 체.이 세 개의 구조 체 는 nginx 이벤트 모듈 의 핵심 구조 체 이다.ngx_connection_t 네트워크 링크 와 읽 기와 쓰기 이벤트 저장, ngxlistening_t. 감청 정 보 를 저장 하 는 것 은 주로 포트 입 니 다.
1.ngx_listening_s 데이터 구조
typedef struct ngx_listening_s  ngx_listening_t;

struct ngx_listening_s {
    ngx_socket_t        fd;/*socket  */

    struct sockaddr    *sockaddr;/*socket  */
    socklen_t           socklen;    /*sockaddr      size of sockaddr */
    size_t              addr_text_max_len;
    ngx_str_t           addr_text;

    int                 type;/*socket    */

    int                 backlog;
    int                 rcvbuf;/*  work       */
    int                 sndbuf;/*  work       */
#if (NGX_HAVE_KEEPALIVE_TUNABLE)
    int                 keepidle;
    int                 keepintvl;
    int                 keepcnt;
#endif

    /* handler of accepted connection */
    ngx_connection_handler_pt   handler;/*              */

    void               *servers;  /*            */

    ngx_log_t           log;
    ngx_log_t          *logp;

    size_t              pool_size;
    /* should be here because of the AcceptEx() preread */
    size_t              post_accept_buffer_size;
    /* should be here because of the deferred accept */
    ngx_msec_t          post_accept_timeout;

    ngx_listening_t    *previous;
    ngx_connection_t   *connection;/*            */

    ngx_rbtree_t        rbtree;
    ngx_rbtree_node_t   sentinel;

    ngx_uint_t          worker;/*       */

    unsigned            open:1;/*socket  ,1    ,0    */
    unsigned            remain:1;/*      ,1    ,0    */
    unsigned            ignore:1;/*    ,1    socket  ,0     */

    unsigned            bound:1;       /* already bound */
    unsigned            inherited:1;   /* i           */
    unsigned            nonblocking_accept:1;
    unsigned            listen:1;/*     ,1      */
    unsigned            nonblocking:1;
    unsigned            shared:1;    /* shared between threads or processes */
    unsigned            addr_ntop:1;
    unsigned            wildcard:1;

#if (NGX_HAVE_INET6)
    unsigned            ipv6only:1;
#endif
    unsigned            reuseport:1;
    unsigned            add_reuseport:1;
    unsigned            keepalive:2;

    unsigned            deferred_accept:1;
    unsigned            delete_deferred:1;
    unsigned            add_deferred:1;
#if (NGX_HAVE_DEFERRED_ACCEPT && defined SO_ACCEPTFILTER)
    char               *accept_filter;
#endif
#if (NGX_HAVE_SETFIB)
    int                 setfib;
#endif

#if (NGX_HAVE_TCP_FASTOPEN)
    int                 fastopen;
#endif

};

2.ngx_connection_s 데이터 구조
struct ngx_connection_s {
    void               *data;
    ngx_event_t        *read;
    ngx_event_t        *write;

    ngx_socket_t        fd;

    ngx_recv_pt         recv;
    ngx_send_pt         send;
    ngx_recv_chain_pt   recv_chain;
    ngx_send_chain_pt   send_chain;

    ngx_listening_t    *listening;

    off_t               sent;

    ngx_log_t          *log;

    ngx_pool_t         *pool;

    int                 type;

    struct sockaddr    *sockaddr;
    socklen_t           socklen;
    ngx_str_t           addr_text;

 …………………………………………………………………………………………

#if (NGX_HAVE_AIO_SENDFILE || NGX_COMPAT)
    unsigned            busy_count:2;
#endif

#if (NGX_THREADS || NGX_COMPAT)
    ngx_thread_task_t  *sendfile_task;
#endif
};

3. 라 이 프 사이클 연결      ngx_connection_t 는 Nginx 가 tcp 연결 에 대한 패키지 입 니 다.우 리 는 TCP 의 생명주기 에서 ngx 를 고찰 할 수 있다connnection_t 의 생명 주기, 여기 서 나 는 그 를 두 부분 으로 나 누 었 다. 하 나 는 환경 을 연결 하 는 준비 단계 이 고 다른 하 나 는 connection 의 관리 단계 이다.3.1 준비 단계       nginx 는 시작 할 때 설정 파일 을 분석 하여 감청 이 필요 한 포트 와 IP 를 얻 습 니 다.그리고 Nginx 는 master 프로 세 스에 서 socket 연결 을 초기 화한 다음 fork 에서 여러 개의 work 하위 프로 세 스 를 내 고 하위 프로 세 스 간 에 경쟁 클 라 이언 트 의 연결 요청 을 합 니 다.3.2 connection 의 관리 단계       work 프로 세 스 가 클 라 이언 트 요청 을 가 져 온 후 socket 을 가 져 와 연결 대상 을 만 든 다음 읽 기와 쓰기 이벤트 처 리 를 하고 마지막 으로 클 라 이언 트 나 서버 에서 연결 을 끊 습 니 다.

좋은 웹페이지 즐겨찾기