lighttpd 模块化
来源:互联网 发布:js清空input内容 编辑:程序博客网 时间:2024/05/21 11:26
描述
这个 webserver 允许在不改变核心的情况下可以随意的增加功能,lighttpd 目前支持 16 个 plugin 回调,每个请求会在不同的 state 中执行不同的操作,关于状态机的处理请回顾上一篇.
Serverwide hooks
● init
加载插件时调用
● cleanup
卸载插件时调用
● set_defaults
当配置文件中出现了这个插件的配置,那么这个插件一定会被调用
● handle_trigger
每秒调用一次(有误差)
● handle_sighup
当接收到一个 SIGHUP 信号时调用
Connectionwide hooks
大部分的插件在 http_response_prepare() 函数中调用,必须在设置 connection 结构的一些成员之后.
● handle_uri_raw
插件内部设置 uri.path_raw, uri.authority and uri.scheme 时调用
● handle_uri_clean
插件内部设置 uri_clean 时调用
● handle_docroot
在逻辑路径处理结束时获取一个新的静态文件目录
● handle_subrequest_start
当设置物理路径时调用
● handle_subrequest
在 http_response_prepare() 结束时调用
● handle_physical_path
这个物理路径已经创建,并且没有另外的处理可以找到这个请求
● handle_request_done
请求完成时调用
● handle_connection_close
连接关闭时调用
● handle_joblist
connection_state_engine(状态机) 跳出之后,在每一个插件内部继续处理
● connection_reset
关闭连接之后调用
Plugin Interface
typedef struct { size_t version; buffer *name; /* name of the plugin */ void *(* init) (); handler_t (* set_defaults) (server *srv, void *p_d); handler_t (* cleanup) (server *srv, void *p_d); /* once a second */ handler_t (* handle_trigger) (server *srv, void *p_d); /* at a signup */ handler_t (* handle_sighup) (server *srv, void *p_d); /* after uri_raw is set */ handler_t (* handle_uri_raw) (server *srv, connection *con, void *p_d); /* after uri is set */ handler_t (* handle_uri_clean) (server *srv, connection *con, void *p_d); /* getting the document-root */ handler_t (* handle_docroot) (server *srv, connection *con, void *p_d); /* mapping url to physical path */ handler_t (* handle_physical) (server *srv, connection *con, void *p_d); /* at the end of a request */ handler_t (* handle_request_done) (server *srv, connection *con, void *p_d); /* at the end of a connection */ handler_t (* handle_connection_close)(server *srv, connection *con, void *p_d); /* after all events are handled */ handler_t (* handle_joblist) (server *srv, connection *con, void *p_d); /* when a handler for the request * has to be found */ handler_t (* handle_subrequest_start)(server *srv, connection *con, void *p_d); handler_t (* handle_subrequest) (server *srv, connection *con, void *p_d); handler_t (* connection_reset) (server *srv, connection *con, void *p_d); void *data; /* dlopen handle */ void *lib;} plugin;
*_plugin_init
用于设置 plugin
结构的数据成员,如:插件名称、回调. (每一个插件都有一个唯一的命名,所有的插件必须在加载之后才能调用)
这个初始化接口不应该修改成员值,lib
成员是通过调用 dlopen 接口返回的动态链接库句柄,通过这个句柄来使用库中的函数和类。data
成员将作为存储内部插件的数据.
init
第一次真正调用的插件钩子函数是这个 init,并且负责分配 data
成员的内存,在 *_plugin_init 有描述.
return: 指向这个内部插件的 data
cleanup
在插件卸载之前的清除钩子函数,意思是释放在 init
或 别的地方
分配的 buffers 内存,
return: HANDLER_GO_ON if ok (not handled)
set_defaults
set_defaults 是插件的入口点,将进入配置解析,它应该将一个选项列表插入到 config_insert_values
并且验证这个插件的配置是否有效,如果它是无效的,它应该使用一个默认的选项或返回一个 HANDLER_ERROR 错误消息.
returns:
HANDLER_GO_ON if ok
HANDLER_ERROR will terminate lighttpd
connection_reset
每一个请求结束时调用
returns:
HANDLER_GO_ON if ok
HANDLER_ERROR on error
handle_trigger
每秒调用一次
returns:
HANDLER_GO_ON if ok
HANDLER_ERROR on error
handle_sighup
如果接收到一个 SIGHUP 信号时调用 (cycling logfiles, …)
returns:
HANDLER_GO_ON if ok
HANDLER_ERROR on error
handle_uri_raw
设置 uri_raw 之后调用
returns:
HANDLER_GO_ON if ok
HANDLER_FINISHED if the final output is prepared
HANDLER_ERROR on error
handle_uri_clean
设置 uri.path 之后调用
returns:
HANDLER_GO_ON if ok
HANDLER_FINISHED if the final output is prepared
HANDLER_ERROR on error
handle_docroot
当需要更改 docroot
returns:
HANDLER_GO_ON if ok
HANDLER_FINISHED if the final output is prepared
HANDLER_ERROR on error
handle_subrequest_start
设置 physical.path 之后调用
returns:
HANDLER_GO_ON if ok
HANDLER_FINISHED if the final output is prepared
HANDLER_ERROR on error
handle_subrequest
subrequest_start 请求回源或等待一个可读事件
returns:
HANDLER_GO_ON if ok
HANDLER_FINISHED if the final output is prepared
HANDLER_ERROR on error
handle_physical_path
设置 physical.path 之后调用
returns:
HANDLER_GO_ON if ok
HANDLER_FINISHED if the final output is prepared
HANDLER_ERROR on error
handle_request_done
请求结束时调用 (logging, statistics, …)
returns:
HANDLER_GO_ON if ok
HANDLER_ERROR on error
handle_connection_close
连接终止时调用
returns:
HANDLER_GO_ON if ok
HANDLER_ERROR on error
handle_joblist
这个连接的状态发生改变时调用
returns:
HANDLER_GO_ON if ok
HANDLER_ERROR on error
- lighttpd 模块化
- lighttpd
- lighttpd
- lighttpd
- lighttpd
- 模块化
- 模块化
- 模块化
- 模块化
- 模块化
- 模块化
- 模块化
- 模块化
- 模块化
- 模块化
- 模块化
- /etc/lighttpd/lighttpd.conf
- Lighttpd + ror
- WebService(2)-XML系列之Java和Xml之间相互转换
- java中的深克隆和浅克隆
- objective-c类初始化
- nginx 原理
- github 迁移google code 项目
- lighttpd 模块化
- C++调用LUA函数,可变参模板实现
- python: 目录操作
- Linux中断(interrupt)子系统之五:软件中断(softIRQ)
- Android中创建杀不死的APP进程(5.0以下)
- (一)线性表的链式存储结构
- 在C语言中的字符串(二)
- struts2、servlet中返回json数据格式
- Android中动态生成ListView及SimpleAdapter的使用