`

Lighttpd核心结构分析

阅读更多
Lighttpd源代码中涉及到的几类核心数据结构,虽然采用的大量结构化语言,但是到处体现的是面向对象的事项。

1:buffer(字符串函数)
内部定义如下:
typedef struct {
	char *ptr; //字符串指针

	size_t used;//已用大小
	size_t size;//总共大小
} buffer;
从该结构衍生出,二维字符串数组结构

typedef struct {
	buffer **ptr;

	size_t used;
	size_t size;
} buffer_array;

1.1buffer初始化内存特点
使用一个已经存在BUFFER初始化当前BUFFER的时候,采取措施分配的内存都是64的整数倍。
/**
 *
 * allocate (if neccessary) enough space for 'size' bytes and
 * set the 'used' counter to 0
 *
 */
#define BUFFER_PIECE_SIZE 64

int buffer_prepare_copy(buffer *b, size_t size) {
	if (!b) return -1;

	if ((0 == b->size) ||
	    (size > b->size)) {
		if (b->size) free(b->ptr);

		b->size = size;

		/* always allocate a multiply of BUFFER_PIECE_SIZE */
		b->size += BUFFER_PIECE_SIZE - (b->size % BUFFER_PIECE_SIZE);//设置为PIECE的整数倍

		b->ptr = malloc(b->size);
		assert(b->ptr);
	}
	b->used = 0;
}


2:dataset类型(对象模板,通用结构)
typedef enum { TYPE_UNSET, TYPE_STRING, TYPE_COUNT, TYPE_ARRAY, TYPE_INTEGER, TYPE_FASTCGI, TYPE_CONFIG } data_type_t;
#define DATA_UNSET \
	data_type_t type; \
	buffer *key; \
	int is_index_key; /* 1 if key is a array index (autogenerated keys) */ \
	struct data_unset *(*copy)(const struct data_unset *src); \
	void (* free)(struct data_unset *p); \
	void (* reset)(struct data_unset *p); \
	int (*insert_dup)(struct data_unset *dst, struct data_unset *src); \
	void (*print)(const struct data_unset *p, int depth)

typedef struct data_unset {
	DATA_UNSET;
} data_unset;

/*data_unset 实际的类型,有点类似于函数
typedef struct data_unset
{
	data_type_t type;
	buffer * key;
	int is_index_key;
	struct data_unset *(*copy)(const struct data_unset *src); 
	void (* free)(struct data_unset *p); 
	void (* reset)(struct data_unset *p); 
	int (*insert_dup)(struct data_unset *dst, struct data_unset *src); \
	void (*print)(const struct data_unset *p, int depth)
}
*/

data_unset可以是整形,字符串行,以及其他类型,但是通过函数指针,定于几个函数free,
reset,print等等。相当于data_unset是一个虚基类

3:array(实际上data_unset的二维结构)
array定于如下:
typedef struct {
	data_unset  **data;--二维data

	size_t *sorted;

	size_t used;
	size_t size;

	size_t unique_ndx;

	size_t next_power_of_2;
	int is_weakref; /* data is weakref, don't bother the data */
} array;
分享到:
评论

相关推荐

    Lighttpd源码分析_高群凯

    Lighttpd源码分析将帮助我们深入理解这一服务器软件的工作原理和内部结构。 高群凯所著的《Lighttpd源码分析》文档可能是对Lighttpd源码的详细解读。尽管文档的具体内容未详述,但根据标题和描述,我们可以推断该...

    lighttpd-1.4.20源码分析

    lighttpd-1.4.20源码看了很久了,学习总结本来早就该写...各基本数据结构的分析整理倒是基本完了 但是lighttpd源码最核心的东西(比如配置信息的加载 比如对客户请求访问的响应 等) 我还没整理完 呵呵 未完 请继续关注

    Lighttpd源码分析.zip

    Lighttpd作为HTTP服务器,其核心任务就是解析这些请求,执行适当的操作,然后生成并返回响应。 Lighttpd的源码设计遵循模块化原则,这使得它能够灵活地扩展功能。其主要模块包括: 1. **网络通信模块**:负责处理...

    lighttpd源码分析

    Lighttpd是一款轻量级且高效的Web服务器软件,以其低内存占用、快速响应和模块化的结构而备受青睐。本文将深入探讨lighttpd的源码,揭示其内部工作机制,帮助开发者更好地理解和优化这款服务器。 1. **架构概述** ...

    lighttpd代码阅读资料

    本文将围绕lighttpd的代码阅读资料,详细介绍其核心概念、设计架构以及如何有效地进行代码分析。 一、lighttpd的核心特性 1. 轻量级:lighttpd设计之初就注重资源效率,尤其是在内存使用上,使得它在处理大量并发...

    lighttpd-1.4.20源代码

    1. **项目结构分析** lighttpd的源代码结构清晰,主要分为几个核心部分:配置解析、网络处理、模块系统、HTTP协议处理、内存管理等。源码中的`src`目录包含了所有核心组件,如`config`用于解析配置文件,`http`包含...

    Lighttpd源码分析

    #### 二、Lighttpd核心功能 1. **高效性能**:Lighttpd采用了异步IO机制,能够有效地处理大量并发连接。 2. **低资源消耗**:与Apache等传统Web服务器相比,Lighttpd在处理相同负载时占用更少的内存。 3. **安全性*...

    lighttpd 源代码

    lighttpd是一款轻量级且高性能的Web服务器,以其低内存占用、快速响应和模块化的结构而备受开发者喜爱。它的源代码以C语言编写,这使得它在效率和可移植性上具有显著优势。在本文中,我们将深入探讨lighttpd的源代码...

    Lighttped 1.4.x Brief Analysis 原码分析,Chaoslawful著

    《Lighttpd 1.4.x 原码分析》是由 Chaoslawful 撰写的关于轻量级 Web 服务器 Lighttpd 1.4.x 版本的详细技术解析。Lighttpd 是一个高性能、低系统资源消耗的开源 Web 服务器,常用于小型和大型的互联网服务。在本文...

    nginx源码分析-高性能服务器编写

    本文旨在深入分析Nginx的核心设计原理及其实现技巧,特别是通过源码层面来探索其成为现代高性能Web服务器的原因。 #### 基本配置 **安装**:Nginx可以通过官方提供的包管理工具或手动编译安装。对于初学者来说,...

    Web服务器搭建工具

    4. 日志分析:通过分析服务器日志,了解网站访问情况,优化性能。 总之,Web服务器搭建工具是构建互联网服务的核心工具。正确选择和配置Web服务器能够确保网站的高效、稳定和安全运行。无论是个人博客还是大型企业...

    高性能高并发服务器架构

    实战案例分析 - **案例一**:YouTube的架构扩展 - **策略**: - 数据库分片。 - 使用NoSQL数据库存储非结构化数据。 - CDN服务。 - **案例二**:eBay的数据量及架构 - **策略**: - 分布式数据库。 - 数据库...

    基于Linux的嵌入式Web服务器Thttpd的应用研究与实现.doc

    - **核心代码分析**:分析Thttpd的核心代码逻辑,如HTTP请求处理流程、CGI程序调用机制等。 #### 四、案例总结 **4.1 系统测试结果和分析** 通过对Thttpd服务器进行多轮测试,我们获得了丰富的数据和反馈信息。...

    基于ZigBee技术的智能家居网关设计.pdf

    此外,轻量级Web服务器Lighttpd的使用,便于网关搭建一个简易的Web服务,从而实现了用户通过智能移动终端,比如智能手机、平板电脑等,对家中各种家用电器进行远程控制和管理的功能。 ZigBee技术是智能家居网关设计...

    上海Linux运维工程师-面试题-个人总结).pdf

    8. **相关经验**:Squid缓存服务器、Nginx/Lighttpd等Web服务器、Memcached缓存服务、负载均衡和分布式文件处理等,这些都是运维工程师应掌握的关键技术。 9. **DNS解析**:DNS使用53端口,正向解析将域名转换为IP...

    《ARM Linux嵌入式网络控制系统》书中代码

    这可能涉及到性能日志分析,找出瓶颈,然后针对性地调整代码,比如改进并发处理、优化数据结构、减少垃圾回收频率等。 总的来说,这个压缩包中的代码提供了丰富的学习材料,读者可以深入理解嵌入式网络控制系统的...

    基于RaspberryPi实现的智能家居36.docx

    本章简要介绍了TCP/IP协议栈的基本结构,并比较了五种不同的Web服务器(如Apache、Nginx、Lighttpd等),分析它们的性能特点和适用场景。通过将服务器暴露给外部网络,实现了远程访问,例如远程视频监控,这在智能...

    校内、猫扑、facebook大型互动网站架构预览

    5. **性能优化**:对内存、线程等资源进行合理配置,利用各种工具如JDK Tools、JProfiler、Resin Profiler进行性能监控和分析。 6. **负载均衡**:通过四层和七层负载均衡技术处理高并发请求,DNS轮询则适用于静态...

    渗透测试面试题2019版.pdf

    根据提供的文件信息,我们可以归纳和扩展出以下与渗透测试相关的知识点: ### 渗透测试基础知识 ...以上知识点为渗透测试的基础与核心内容,通过对这些方面的深入学习和实践,可以有效提高渗透测试的能力和效率。

    piaware-web:PiAware SD卡图像的Landingstatus网页

    PiAware是一个基于Raspberry Pi的开源项目,其核心功能是接收、处理和分发FlightAware的ADS-B(Automatic Dependent Surveillance-Broadcast)数据,这些数据主要来自于飞机的无线传输,用于跟踪飞行状态。...

Global site tag (gtag.js) - Google Analytics