Nginx的資料結構–整型和字串
Tags: 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>
我們可以看到它是一個簡單的結構指針指向字串起始位址,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,裡面的data指針是指向和原先的ngx_str_t一個地址,然後將len改為3即可。
當然,這只是個一個最簡單的應用,字串類型幾乎是各種業務系統也好,網路框架也好使用十分廣泛的一種基本類型,良好的設計結構是Nginx低記憶體消耗的重要保證。