GoAhead2.5源代码分析之10-web server主程序(main.c)
main.c(主程序)
是web服务器的主要,也就是启动函数。
int websvxmain(int argc, char **argv)
功能:goahead web服务器的启动的第一个函数。
说明:
1. 判断命令中有没有-demo,有则,代码中包含/wwwdemo/目录下的页面对应的cgi程序,该目录下是一些例子程序。
2. 分配一个60k的内存空间。
3. 初始化web服务器。
4. 然后进入while循环,在打开的socket数组中寻找是否有一个socket需要处理(socketReady);如果没有,则等待2秒,发现有可读、可写socket(socketSelect)。如果有则进行处理(socketProcess)。对于cgi程序需要进行输出数据到浏览器,释放内存(websCgiCleanup),还进行emfSchedProcess(以后再说)
5. while循环之外,umclose、关闭web服务器、关闭socket,这些主要是释放分配的内存。
—————————————————————————————————————–
static int initWebs(int demo)
功能:初始化web服务器。
说明:
1. 用到的全局变量的初始化,打开sym hash table、打开用户管理,注册UM tables。
2. 从配置文件umconfig.txt中恢复um的数据。
3. 获得web服务器所在主机上的ip地址等信息。
4. 确定web服务器的根目录,对于例子程序,根目录是/ata0/webs/wwwdemo,这个只是例子,真正的根目录是/ata0/webs/www.
5. 设置默认的目录为/ata0/webs/www.
6. 设置默认的页面和密码(websSetDefaultPage(T(“default.asp”)); websSetPassword(password);),默认页面有用,密码没有用到,没啥用。默认页面主要是当websDefaultHandler处理的url请求时,如果url只是路径,没有页面时,就调用这个页面。
7. 然后建立socket,listen。(websOpenServer)
8. 创建几个处理句柄,分别对应认证(websSecurityHandler),gofrom处理(websFormHandler),标准cgi处理(websCgiHandler),page(html、css、image)、asp处理(websDefaultHandler)。
9. 然后是两个例子程序,分别对应goform、asp,移植web服务器时,将其注释掉。
10. 然后是用户管理对应的页面的asp、goform程序,移植web服务器时不需要这些。
11. 然后定义一个默认主页面,也就是当用户登陆到web服务器是,输入ip地址,能够自动跳到的页面,也就是更目录“/”时,例如193168.12.12或192.168.12.12/。移植时,根据具体情况自己修改。
12. 然后是SIGTERM、SIGKILL两个信号的处理程序。
—————————————————————————————————————–
static int aspTest(int eid, webs_t wp, int argc, char_t **argv)
功能:一个asp的例子。
说明:也就是/wwwdemo/asptest.asp上对应的asp处理函数。
—————————————————————————————————————–
static void formTest(webs_t wp, char_t *path, char_t *query)
功能:一个form例子。
说明:
—————————————————————————————————————–
static int websHomePageHandler(webs_t wp, char_t *urlPrefix, char_t *webDir,
int arg, char_t *url, char_t *path, char_t *query)
功能:主页面处理函数
说明:当输入的只是ip地址,或者有ip地址和根路径“/”,跳到该函数定义的页面去。
—————————————————————————————————————–
static void websTermSigHandler(int signo)
功能:SIGTERM、SIGKILL信号处理函数
说明:主要释放内存。
—————————————————————————————————————–