Heim > Backend-Entwicklung > PHP-Tutorial > Nginx的数据结构--整型和字符串

Nginx的数据结构--整型和字符串

WBOY
Freigeben: 2016-07-29 09:08:35
Original
994 Leute haben es durchsucht

Nginx的数据结构–整型和字符串

Tags: Nginx数据结构


考虑到跨平台、高效率、统一规范,Nginx封装了许多的数据结构,大多数都是我们在其他开发项目中经常用到的一些,当然还有一些复杂的容器,笔者每篇文章会对其中一至两个点进行分析和练习讲解。

整型封装

<code><span>typedef</span> intptr_t ngx_int_t;
<span>typedef</span> uintptr_t ngx_uint_t'</code>
Nach dem Login kopieren

字符串类型

在Nginx中,使用Ngx_str_t表示字符串,它的定义如下:

<code><span>typedef</span> struct {
    size_t      len;
    u_char     *<span><span>data</span>;</span>
} ngx_str_t;</code>
Nach dem Login kopieren

我们可以看到它是一个简单的结构体,只有两个成员,data指针指向字符串起始地址,len表示字符串的长度。
这里你可能会产生疑惑,C语言中的字符串只需要有一个指针就能表示了,为什么这里还需要一个长度呢?这是因为C语言中我们常说的字符串,其实是以’\0’结尾的一串字符,约定俗称的,一旦读取到这个标记则表示字符串结束了,在C++中建立字符串的时候编译器会自动在后面加上’\0’标记。但是Ngx_str_t中的data指针却不是指向C语言中的字符串,而只是一串普通字符的起始地址,这串字符串不会特别的使用’\0’标记作为自己的结尾,所以我们需要len来告诉使用者字符串的长度。
那这样做有什么好处呢?作为网络服务器,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>
Nach dem Login kopieren

那如果我们使用了一个Ngx_str_t结构体来存储了这个值,现在我们想获取请求类型,是GET还是POST或是PUT?我们不需要拷贝一份内存,我们要做仅仅是做一个新的ngx_str_t,里面的data指针是指向和原先的ngx_str_t一个地址,然后将len改为3即可。
当然,这只是个一个最简单的应用,字符串类型几乎是各种业务系统也好,网络框架也好使用十分广泛的一种基本类型,良好的设计结构是Nginx低内存消耗的重要保证。

ngx_str_t的操作

有了字符串这个简单的一个结构体其实并不是特别的方便,在Java,Python这样的现代高级语言中,都提供了丰富对于字符串类型的操作,Nginx也提供了不少的字符串操作公共函数,尽管有些看上去并不是那么容易用好,那么我们来一一看下这些函数。

睡觉了,明天来写吧

').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });

以上就介绍了Nginx的数据结构--整型和字符串,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage