nginx

xiaoxiao2021-02-28  19

1、使用可变参数打印日志。 2、红黑树处理文件。 3、elt? 答、red black tree. 4、typedef定义类型增加代码可读性。 5、EPOLLRDHUP解决对端半关闭,造成服务器从epoll中读取数据错误。 6、问什么是epoll惊群问题? 答、 在主线程中创建一个socket、绑定到本地端口并监听 在主线程中创建一个epoll实例(epoll_create(2)) 将监听socket添加到epoll中(epoll_ctl(2)) 创建多个子线程,每个子线程都共享步骤2里创建的同一个epoll文件描述符,然后调用epoll_wait(2)等待事件到来accept(2) 请求到来,新连接建立 这里的问题就是,在第5步的时候,会有多少个线程被唤醒而从epoll_wait()调用返回?答案是不一定,可能只有一个,也可能有部分,也可能是全部。当然在多个线程都唤醒的情况下,只会有一个线程accept()调用会成功。 7、EPOLLEXCLUSIVE解决惊群问题。 8、CTX? 答、context; 9、保证较长字符串只出现一次。 10、内存对齐函数:posix_memalign及memalign分配ngx_cycle_t内pool堆内存空间。 11、ngx_modules.c中声明了所有组件 12、使用类似linux内核哲学。 结构体里存放一个队列结构体,用来将所有结构体串连起来,通过相对该队列结构体位置,可以找到下一个结构体的开始地址。 13、 红黑树结构:struct ngx_rbtree_node_s;struct ngx_rbtree_s; ngx_rbtree_s内设置根节点指针和哨兵节点指针。以及插入回调函数指针。 14、ngx_rbtree_node_t是时间节点。 15、 先简单答一下。Nginx引入线程池是为了解决因为某些长时间阻塞的调用导致 性能下降的问题。比如文章里提到的cache服务器服务大文件就是一个例子。还 有一些大量计算的应用也可以尝试用它来解决。至于实际效果?呵呵,你测测看 啊。跑一下题,作为一个对Nginx研究非常深入的团队(我们是开发Tengine的), 需要cache服务器的时候我们从来不考虑Nginx。。。 16、ngx_array_t类型里的elts的含义是elements。nelts含义是elements number 17、父子进程通过socketpair方式进行通信。 18、FIOASYNC作用? 答、设置/ 清除信号驱动异步I/O 标志。 19、F_SETOWN作用? 答、设置将要在文件描述词fd上接收SIGIO 或 SIGURG事件信号的进程或进程组标识  20、FD_CLOEXEC作用? 答、close on exec, not on-fork, 意为如果对描述符设置了FD_CLOEXEC,使用execl执行 的程序里,此描述符被关闭,不能再使用它,但是在使用fork调用的子进程中,此描述符 并不关闭,仍可使用。 21、加载nginx.conf配置文件的函数位置? 答、nginx.c   ngx_process_options    ngx_str_set(&cycle->conf_file, NGX_CONF_PATH); 22、st:state 23、ngx_auto_config.h 定义配置文件名。 24、ngx_conf_read_token(cf)函数读配置文件nginx.conf。ngx_conf_file.c 25、ngx_conf_parse(&conf,&cycle->conf_file)处理配置文件nginx.conf。 26、sz:size?? 27、nginx.c  938:getcwd 28、ngx_process_cycle.c 345,358::ngx_spawn_process创建子进程。 29、recvmsg、sendmsg: ngx_channel.c 128;类似socket通信中的read和write, 30、1006 ngx_channel_handler(ngx_event_t*ev);1023 ngx_read_channel,socket读。 31、chdir  869 32、ngx_event_s中data很可能是channel。ngx_channel_t ngx_process_cycle.c:1023;c->fd; 33、ngx_log.c 318 ngx_log_init prefix传出参数。 34、nginx.c 232 ngx_log_init其中ngx_prefix传出参数。ngx_prefix的值是/usr/local/nginx/ 35、nginx.c 969:ngx_str_set(&cycle->conf_file.......); cycle->conf_file=conf/nginx.conf 36、nginx.c 925、cycle->conf_prefix  为ngx_prefix。/usr/local/nginx/ cycle->prefix 为ngx_prefix.  /usr/local/nginx/ 37、nginx.c 972、运行成功结果:conf_file:/usr/local/nginx/conf/nginx.conf; 38、nginx.c 982、运行结果:cycle->conf_prefix.data=/usr/local/nginx/conf/nginx.conf; cycle->conf_prefix.len=sizeof(/usr/local/nginx/conf/); 39、ngx_modules.c中所有extern ngx_module_t **;都会在对应的**.c文件中被定义 40、ngx_module_s的name中存储的是组件名字。例如“ngx_core_module” 41、56、ngx_memcpy(cycle->.......)向初始化cycle->modules。 42、ngx_cycle.c 227 module=cycle->modules[i]->ctx;疑似调用module中的create_conf函数创建文件。 43、ngx_conf_file.c 528,file_size是cf->conf_file文件的大小。 44、ngx_conf_file.c 192, ngx_fd_info获得配置文件cf->conf_file的state信息。 45、ngx_conf_t中 args存储cf->conf_file文件中读取的信息。 46、sharp_comment 表示注释判断标志。 47、nginx.conf 中$开头的表示变量。ngx_conf_file.c 727; 48、nginx.conf中基本单元 单词{ }; 先将单词解析存入ngx_conf_t中的args中。 49、ngx_conf_file.c  405,出现NGX_CONF_BLOCK_START,说明 ngx_conf_file.c  242,返回NGX_CONF_BLOCK_START运行。 50、ngx_conf_file.c  318,rc=ngx_conf_handler(cf,rc);会遍历module,并用cmd处理。 //51、每次处理ngxin.conf中一段数据,ngx_conf_file.c 528都会被执行一次。 //52、ngx_conf_file.c  579,丢弃之前处理的数据,ngx_memmove(b->start,start,len); 53、ngx_conf_file.c  588,带偏移量地读文件。 54、{}内分号结尾的每一行是word读取的内容。 55、ngx_conf_file.c 380,通过比较组件modules的name和cf->args->elts的name(ngx_conf_file.c 363), 选择对应组件的cmd,例如:ngx_event.c 83:ngx_string("events");与nginx.conf中的events{ } 56、nginx.conf中的配置例如 events{ }; events是什么? 答、对应组件的ngx_command_t中的name字符串值。 57、ngx_http_core_module.c 277   nginx.conf 配置中server设置项location处理 例如: server{ location /{ } } 58、 location /hello{ fastcgi_pass 127.0.0.1:8084; include fastcgi.conf; client_max_body_size 2000m; } 其中location:ngx_http_core_module.c:275; fastcgi_pass:ngx_http_fastcgi_module.c:226; include:ngx_http_ssi_filter_module.c:291 client_max_body_size:ngx_http_core_module.c:347; 59、 { } ; 都是读nginx.conf中信息时的分界符。位置ngx_conf_file.c 242; 60、 配置文件nginx.conf中location /demo{ }; demo存储的结构体 ngx_http_core_loc_conf_s; 61、 ngx_http_core_module.c 3204:pclcf是cf的一部分。 62、st:state; 63、cl:chain_link; 64、rb:request_body; 65、nginx.c 372,ngx_single_process_cycle(cycle); 启动所有事件,例如ngx_event.c 184 ngx_event_process_init; 选择ngx_http_auth_basic_module.c、ngx_http_empty_gif_module.c研究组件的运行。 66、所有组件向客户端传递数据,通过结构体ngx_http_complex_value_t; 67、ngx_http_auth_basic_module.c 中23:relm从nginx.conf中读取数据。 68、如何为编写nginx组件,并编译?例如目录src/http/module 答、①、在该目录中写好组件文件.c;注意ngx_http_zongxintext_commands中的ngx_string("zongxintext");用来声明组件名称。 ②、进入objs/目录,修改ngx_modules.c,根据其他module添加方式,添加新建的组件; ③、进入objs/目录,修改Makefile,根据所在目录情况,修改编译; ④、make&&make install; 69、nginx组件ngx_http_empty_gif_module.c的分析? 答、ngx_http_complex_value_t结构体存放响应值;从cv.value.data=ngx_empty_gif;可以推断;ngx_http_send_response 函数会发送请求。 ngx_command_s结构体中第三个变量存储对应组件核心处理方法。 70、队列指针为不同结构体建立联系。
转载请注明原文地址: https://www.6miu.com/read-2300091.html

最新回复(0)