关于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);
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值