Nginx 데이터 구조 – 정수 및 문자열
태그: Nginx 데이터 구조
크로스 플랫폼, 고효율, 통일된 사양을 고려하여 Nginx는 많은 것을 캡슐화합니다. 물론 우리가 다른 개발 프로젝트에서 자주 사용하는 데이터 구조도 있습니다. 각 기사마다 한두 가지 요점을 분석하고 연습할 것입니다.
정수 캡슐화
<code><span>typedef</span> intptr_t ngx_int_t; <span>typedef</span> uintptr_t ngx_uint_t'</code>
문자열 유형
Nginx에서는 Ngx_str_t를 사용하여 문자열을 표현하며 정의는 다음과 같습니다.
<code><span>typedef</span> struct { size_t len; u_char *<span><span>data</span>;</span> } ngx_str_t;</code>
2개의 멤버만 있는 간단한 구조임을 알 수 있습니다. 데이터 포인터는 문자열의 시작 주소를 가리키고 len은 문자열의 길이를 나타냅니다.
여기서 혼란스러울 수 있습니다. C 언어의 문자열에는 이를 표현하기 위한 포인터만 필요합니다. 여기서 길이가 필요한 이유는 무엇입니까? 우리가 C 언어에서 자주 이야기하는 문자열은 실제로 ''로 시작하기 때문입니다.
그러면 이렇게 하면 어떤 이점이 있나요? 네트워크 서버로서 Nginx는 확실히 개발을 촉진해야 할 필요성을 고려합니다. 네트워크 요청에서 가장 많이 노출되는 것은 URL 주소, 요청 헤더 정보, 요청 엔터티 등입니다. 예를 들어 사용자 요청과 같은 URL 주소를 선택하세요.
<code>GET /test/<span>string</span>?<span>a</span>=<span>1</span>&b=<span>2</span><span>http</span>/<span>1.1</span>\r\n</code>그래서 Ngx_str_t 구조를 사용하여 이 값을 저장한다면 이제 요청 유형(GET, POST 또는 PUT)을 얻으려고 합니다. 메모리를 복사할 필요는 없습니다. 새로운 ngx_str_t를 만들기만 하면 됩니다. 내부의 데이터 포인터가 원래 ngx_str_t와 동일한 주소를 가리키고 len을 3으로 변경합니다.
물론 이것은 가장 단순한 애플리케이션일 뿐입니다. 문자열 유형은 거의 모든 비즈니스 시스템과 네트워크 프레임워크에서 널리 사용되는 기본 유형입니다. 좋은 디자인 구조는 Nginx의 낮은 메모리 소비를 보장하는 중요한 요소입니다.