- 配置信息结构(unil.h)
typedef struct tk_conf{
char root[PATHLEN]; // 文件根目录
int port; // 端口号
int thread_num; // 线程数(线程池大小)
}tk_conf_t;
- 请求信息结构(http_request.h)
typedef struct tk_http_request{
char* root; // 配置目录
int fd; // 描述符(监听、连接)
int epoll_fd; // epoll描述符
char buff[MAX_BUF]; // 用户缓冲
int method; // 请求方法
int state; // 请求头解析状态
// 以下主要为标记解析请求时索引信息
// 部分未使用,用于扩展功能
size_t pos;
size_t last;
void *request_start;
void *method_end;
void *uri_start;
void *uri_end;
void *path_start;
void *path_end;
void *query_start;
void *query_end;
int http_major;
int http_minor;
void *request_end;
struct list_head list;
void *cur_header_key_start;
void *cur_header_key_end;
void *cur_header_value_start;
void *cur_header_value_end;
void *timer; // 指向时间戳结构
}tk_http_request_t;
- 响应头结构(http_requesh.h)
typedef struct tk_http_out{
int fd; // 连接描述符
int keep_alive; // HTTP连接状态
time_t mtime; // 文件类型
int modified; // 是否修改
int status; // 返回码
}tk_http_out_t;
- 优先队列结构(priority_queue.h)
typedef struct priority_queue{
void **pq; // 优先队列节点指针
size_t nalloc; // 优先队列实际元素个数
size_t size; // 优先队列大小
tk_pq_comparator_pt comp; // 堆模式
}tk_pq_t;
- 时间结构(timer.h)
typedef struct tk_timer{
size_t key; // 标记超时时间
int deleted; // 标记是否被删除
timer_handler_pt handler; // 超时处理
tk_http_request_t *request; // 指向对应的request请求
} tk_timer_t;
- I/O包结构(rio.h)
typedef struct{
int rio_fd; // 描述符
ssize_t rio_cnt; // buf中未读字节数
char *rio_bufptr; // 下一个未读字符指针
char rio_buf[RIO_BUFSIZE]; // 缓冲
}rio_t;
- 线程池结构(threadpool.h)
typedef struct threadpool{
pthread_mutex_t lock; // 互斥锁
pthread_cond_t cond; // 条件变量
pthread_t *threads; // 线程
tk_task_t *head; // 任务链表
int thread_count; // 线程数
int queue_size; // 任务链表长
int shutdown; // 关机方式
int started;
}tk_threadpool_t;
- 任务结构(threadpool.h)
typedef struct tk_task{
void (*func)(void *); //
void *arg; //
struct tk_task *next; // 任务链表(下一节点指针)
}tk_task_t;