Nginx의 : HTTP 응답 전송 - 다운 스트림 속도 우선

여기에 그림 삽입 설명

  • 응답 메시지를 수신하는
    ngx_http_upstream_process_non_buffered_request ()
    N-upstream- =>는 RECV (상류 B-> 최근, 크기)
    의 U-> 완충액 (proxy_buffer_size 명령 사이즈)에 저장한다.

  • U-> free_bufs 적용 :
    a) ngx_chain_t 할당,
    2)에 할당 ngx_buf_t (CL-> BUF).

  • U-> out_bufs 생성 :
    U-> input_filter
    1)에서 취득한 ngx_chain_t U-> free_bufs 및.
    2) out_bufs U- 끝에 매달려 ngx_chain_t 취득>;
    3) ngx_chain_t-> ngx_buf_t POS 및 마지막 지점 U. -> 새로받은 부분에 버퍼;
    참조 내용 out_bufs는 오지 복사하여 전송하지만 포인터로한다.

  • U-> out_bufs 보낼 :
    ngx_http_upstream_process_non_buffered_request ()가
    ngx_http_write_filter 호출합니다. 이 기능은 R -> 발송하는 데 사용됩니다, U-> out_bufs에 R->내는 것이 필요하다.
    1) ngx_chain_t 부여하고 BUF의 CL-> BUF 포인트 U-> out_bufs 및 CL R-> 아웃 종료 링크.
    이 과정의 내용이 존재하지 않는 복사 만 ngx_chain_t 할당 여기에서 볼 수 있습니다.
    2) 송신에서 R-> 대한 C-> send_chain 부른다.
    3) 성공적으로 송신 된 ngx_chain_t R-> 밖으로 들어 ngx_chain_t의 방출은 일 (단)가 ngx_buf_t U-> out_bufs 인덱스 ngx_buf_t 1에 대응하는 애플리케이션을 방출하지 않는다. R-> 밖으로 완전히 전달되지 않는 경우, 아웃> R-점은 노드를 전송하지 않습니다.

  • U-> out_bufs 복구 :
    ngx_chain_update_chains를 호출합니다.
    1) U-> busy_bufs NULL로 지정 out_bufs> out_bufs, U-> U-할당됩니다.
    2)> busy_bufs, 상기 노드의 전송 여부를 판단 BUF 마지막 위치 POS CL->을 결정하여 U- 이송. 노드를 보내는> free_bufs U-을 토출하기 (ngx_buf_t 공개되지 않음)을 갖는다 ngx_chain_t 상기 U-> busy_bufs 저장 노드로 전송.

추천

출처blog.csdn.net/u013032097/article/details/91413186