前面叙述了编写 configure.ac 和 Makefile.am,现在开始正式介绍 tea 的基本模块。
tea/inc目录下的头文件,就是tea基本模块的描述,主要包括:
sock_srv.h 声明一个多线程的tcp server接口,实现对应 tea/src/sock_srv.c 其中使用了一个简单的线程池,如果平台支持openssl,同时支持tcp ssl server.
在 sock_srv.c 的实现中,同时启动多个工作线程,每个线程的基本逻辑如下:
work thread proc:
while !exit do
acquire lock
work_sock = accept()
release lock
call PFN_ts_new_connection
end while
end proc
http_msg.h 声明对一个 http request/response msg 的操作,和从字节流中解析 http msg 的方法;实现对应 tea/src/http_msg.c
http msg parser 使用一个简单的状态机,每写入状态机一个字节,状态机判断状态转换,其实这里需要改进的,当状态为PS_BODY时,应该根据Content-Length,一次尽量写入多个字节,以提高效率。
http_srv.h 基于 sock_srv,声明一个 httpd 接口,基本与 sock_srv.h 没啥区别,对应 tea/src/http_srv.c 实现
特别的,使用 tcp_client 接口用于封装 socket 和 ssl 的内部实现。
tea_httpd_plugin_inf.h 插件接口,声明兼容插件必须支持的接口。
这里很直白,没啥可说的,提供 version() 的主要目的是为了扩展方便,当需要增加方法时,在结构后面增加就是了,通过version()检查,能够做到二进制兼容的。
[plugin loader] 还没有开始写呢,目的是动态加载插件。行了,没写的就不说了.... 下次吧。