关于tinyhttpd

现在比较火的http server主要是apache nginx  。apache的主要优点是稳定,bug少,属于阻塞式的,所以对于高并发的情景下表现并不好。

而nginx最近几年越来越火,属于非阻塞式的,擅长高并发的情景。

如果追求性能应该选择nginx,而如果追求的是稳定,选择apache就好

微信那边自己开发了一个http server。估计也是从安全的角度考虑的。

看了一下tinyhttpd的源码,温顾了一下tcp编程


基本流程如上图   linux下的TCP编程

而http server  主要还是在while循环中一直拉去TCP包,从包头中解析出GET  POST  字符串

从而进行一些CGI类的操作

CGI 不太懂   common gateway interface 通用网关接口,主要作用是

定义了利用程序的标准输入输出流,完成 HTTP 通信。HTTP 是文本协议,每次请求的文本以标准输入流的形式进入服务器端 CGI 程序,创建进程;然后进程的标准输出流作为响应 

比如是显示某一路劲下的某一html文件

HTTP的一些信息也是通过发送send 和recv实现的

看代码:

void not_found(int client)
{
 char buf[1024];

 sprintf(buf, "HTTP/1.0 404 NOT FOUND\r\n");
 send(client, buf, strlen(buf), 0);
 sprintf(buf, SERVER_STRING);
 send(client, buf, strlen(buf), 0);
 sprintf(buf, "Content-Type: text/html\r\n");
 send(client, buf, strlen(buf), 0);
 sprintf(buf, "\r\n");
 send(client, buf, strlen(buf), 0);
 sprintf(buf, "<HTML><TITLE>Not Found</TITLE>\r\n");
 send(client, buf, strlen(buf), 0);
 sprintf(buf, "<BODY><P>The server could not fulfill\r\n");
 send(client, buf, strlen(buf), 0);
 sprintf(buf, "your request because the resource specified\r\n");
 send(client, buf, strlen(buf), 0);
 sprintf(buf, "is unavailable or nonexistent.\r\n");
 send(client, buf, strlen(buf), 0);
 sprintf(buf, "</BODY></HTML>\r\n");
 send(client, buf, strlen(buf), 0);
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

posted @ 2015-01-22 17:15  mooreliu  阅读(544)  评论(0)    收藏  举报