lighttpd为什么要accept多次呢

在lighttpd网络模型里面我们可以看到以下代码

 1 /* accept()s at most 100 connections directly
 2      *
 3      * we jump out after 100 to give the waiting connections a chance */
 4     for (loops = 0; loops < 100 && NULL != (con = connection_accept(srv, srv_socket)); loops++) {
 5         handler_t r;
 6
 7         connection_state_machine(srv, con);
 8
 9         switch(r = plugins_call_handle_joblist(srv, con)) {
10         case HANDLER_FINISHED:
11         case HANDLER_GO_ON:
12             break;
13         default:
14             log_error_write(srv, __FILE__, __LINE__, "d", r);
15             break;
16         }
17     }
18     return HANDLER_GO_ON;

顾名思义,当有连接来的时候,从select多路复用,但是我们处理连接的时候,我们不知道事件的来源和次数,所以要循环好、判断,我的猜测是这样的

下面来证明  这段代码是来自unix网络编程的sleect模型的服务端

 1  for ( ; ; ) {
 2                 rset = allset;          /* structure assignment */
 3                 nready = Select(maxfd+1, &rset, NULL, NULL, NULL);
 4
 5                 if (FD_ISSET(listenfd, &rset)) {        /* new client connection */
 6                         clilen = sizeof(cliaddr);
 7                         connfd = Accept(listenfd, (SA *) &cliaddr, &clilen);
 8
 9
10                         printf("new client:1, fd %d\n",connfd);
11                          sleep(10);
12                         connfd1 = Accept(listenfd, (SA *) &cliaddr, &clilen);
13                           printf("new client:2, fd %d\n",connfd1);
14
15                      sleep(10);
16                       return 0;

我们故意在中间停顿了10秒,好让更多的连接进来,

启动服务端

[[email protected] tcpcliserv]# ./tcpservselect01

同时在另外两个个shell下面输入

./tcpcli01 127.0.0.1

这时候我们可以看多服务端输出

new client:1, fd 4
new client:2, fd 5

呵呵,证明我们的猜想是对的

如果我们不accept多次,那么要等下一次select才能处理,一次一个请求,so,效率很低罗,如果多个用户进来的时候

时间: 2024-08-05 15:53:10

lighttpd为什么要accept多次呢的相关文章

lighttpd+fastcgi模块分析

一开始不怎么明白fastcgi和cgi的区别,查了资料说,fastcgi多了一个进程池,不要每次都fork和退出 这个不是重点,还是对着代码看吧 怎样在lighttpd运行php呢,需要下面这样配置 把fastcig模块的前面井号去掉,然后在下面加上这个相关的配置就可以 fastcgi.debug = 1fastcgi.server = ( ".php" => ( "localhost" => ( "host"=>"1

通过ngx-lua来统计Nginx上的虚拟主机性能数据

Web server调研分析 Filed under: Web Server — cmpan @ 2012-10-29 20:38:34 摘要 简单可依赖的架构首先需要有一个简单可依赖的前端WebServer集群.本文通过深入调研当前主流的异步web服务器Lighttpd和Nginx,从业界使用情况.架构原理.扩展开发.功能对比.性能对比等多个方面进行分析. 调研分析 业界相关 从业界使用情况来看,最新Web Server使用情况的数据如下:Nginx的使用率是6.6%,Lighttpd的使用率

linux下安装lighttpd配置详解

为什么要使用lighttpd?      apache不可以吗?      在支持纯静态的对象时,比如图片,文件等 ,      lighttpd速度更快,更理想      至于它和apache的比较,很多文档,大家可以百度一下 本次使用1.4.41版本 官方网点:http://www.lighttpd.net 官方下载站点:http://www.lighttpd.net/download/ 官方给出了安装配置的详细文档 http://redmine.lighttpd.net/projects/

lighttpd fastcgi的搭建

公司很久以前有个task需要在板子上搭建个webserver以响应局域网内手机的请求. 以前是用lighttpd plugin实现的,后来仔细想想用fast cgi来弄也可以. 在install lighttpd之前,先要install pcre和fcgi.我习惯install到/usr/local/pcre和/usr/local/libfcgi. 写个简单的配置文件,如下: server.document-root = "/mnt/hgfs/share/test/fcgi/"serv

lighttpd的超时参数详解

今天服务器上传大文件,服务器php一直没有响应,响应为0KB,经排查发现是lighttpd的超时设置问题 server.max-keep-alive-idle = 5server.max-read-idle = 60server.read-timeout = 0server.max-connection-idle = 360 这几个参数意思相近,配置的时候很容易搞混. 对于一个keep-alive连接上的连续请求,发送第一个请求内容的最大间隔由参数max-read-idle决定,从第二个请求起,

Linux(centos 7)配置tomcat8、JDK1.8、lighttpd、ngnix、mysql

JDK 下载好后使用 rpm -ivh jdk-7u25-linux-x64.rpm 进行安装. 安装好后编辑 /etc/profile 文件,在末尾加上: 1 2 3 export JAVA_HOME="/usr/java/jdk1.7.0_25" export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$PATH:$JAVA_HOM

QT的父子Widget之间消息的传递(如果子类没有accept或ignore该事件,则该事件会被传递给其父亲)

以前我一直以为:在父widget上摆一个子widget后,当click子widget时:只会进入到子widget的相关事件处理函数中,比如进入到mousePressEvent()中, 而不会进入到父widget的对应事件处理函数中.毕竟:click的是子widget,其遮挡住了父widget,从而父widget接收不到这个事件.然而事实真的是这个样子吗? 我做了一个测试: 在一个QWidget上建了一个QLabel.而后实现父QWidget的mousePressEvent(), 然后跟一下发现:

Lighttpd

一.简介 Lighttpd 是一个德国人领导的开源Web服务器软件,其根本的目的是提供一个专门针对高性能网站,安全.快速.兼容性好并且灵活的web server环境.具有非常低的内存开销,cpu占用率低,效能好,以及丰富的模块等特点. 二.安装 1)下载 http://www.lighttpd.net/2016/10/31/1.4.43/ 2)配置 http://redmine.lighttpd.net/projects/lighttpd/wiki/TutorialConfiguration

lighttpd与fastcgi+cgilua

安装 lighttpd安装 http://www.lighttpd.net/ http://redmine.lighttpd.net/projects/lighttpd/wiki 1. 先执行 ./configure --prefix=/usr/local/lighttpd 缺少pcre库处理方法: http://stackoverflow.com/questions/2263404/what-package-i-should-install-for-pcre-devel apt-cache s