Articles of c + +

Nginx + fastcgimultithreading

你好,我一直在试图做fastcgi应用程序,我希望它是multithreading的,所以它可以处理大量的请求在同一时间。 我find了代码,并修改了一下 FCGX_InitRequest(&request, 0, FCGI_FAIL_ACCEPT_ON_INTR); for (;;) { static pthread_mutex_t accept_mutex = PTHREAD_MUTEX_INITIALIZER; static pthread_mutex_t counts_mutex = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_lock(&accept_mutex); rc = FCGX_Accept_r(&request); pthread_mutex_unlock(&accept_mutex); … … … FCGX_FPrintF(request.out,"%s",test_stream.str().c_str()); FCGX_Finish_r(&request); } 代码一直在接受,所以实际上等待,直到请求完成。 我试过像这样产卵fastcgi spawn-fcgi -p 8001 -U www-data -n handler.cgi -F 32 spawn-fcgi -p 8001 -U www-data -n handler.cgi — /usr/bin/multiwatch -F 32

如何parsingNginxconfiguration文件?

我想find一种方法来parsingnginxconfiguration文件,以便dynamic生成我将用作文档的图表。 nginxconfiguration文件的语法如下所示(这个例子有意为简洁起见,我pipe理的configuration文件实际上要复杂得多): location / { if (GET) { echo_exec @memcache; } if (POST) { echo_exec @application; } } location @memcache { # try to get content from cache if (notfound) { # fallback to application echo_exec @application; } } location @application { # forwarding request to application } 我想生成这样的图表(当鼠标移动到一个stream程框上时,您将看到注释,正在调用哪个指令…): 据我所知nginxconfiguration文件的语法是自定义的。 我可以在src/core/ngx_conf_file.c里findparsing器,就像这样: case ';': case '{': […]

为什么 – 错误导致configuration错误

我想从源代码生成nginx。 所以我写了一个bash脚本来做到这一点: #!/bin/bash export LD_LIBRARY_PATH="/usr/lib64:$LD_LIBRARY_PATH" dir=$(realpath `dirname $BASH_SOURCE`) cd $dir/modules for folder in * do ADD_MODULES="$ADD_MODULES \ –add-module=$dir/modules/$folder" done cd $dir/nginx ./auto/configure \ –prefix=/usr/share/nginx \ –sbin-path=/usr/sbin/nginx \ –conf-path=/etc/nginx/nginx.conf \ –error-log-path=/var/log/nginx/error.log \ –http-log-path=/var/log/nginx/access.log \ –http-client-body-temp-path=/var/lib/nginx/tmp/client_body \ –http-proxy-temp-path=/var/lib/nginx/tmp/proxy \ –http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi \ –http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi \ –http-scgi-temp-path=/var/lib/nginx/tmp/scgi \ –pid-path=/run/nginx.pid \ –lock-path=/run/lock/subsys/nginx \ –user=nginx \ –group=nginx \ –with-file-aio \ –with-ipv6 \ […]

.NET环境下的TimeZoneInfo托pipe在unix(nginx)

例如,当我尝试执行以下操作时。 TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time") 我得到的错误,时TimeZone在本地计算机上不可用。 当我在本地运行这个工作,但我在窗口上运行它。 在部署时,它在Nginx的Unix机器上运行。 我可以看到FindSystemTimeZoneById在Unix中查找错误的文件夹。 有什么办法可以做这个工作吗?

是否有可能将nginxembedded到C / C ++应用程序中

该应用程序在Linux,Windows,Macintosh上运行。 另外,如果是的话,需要多less努力?

轻量级Web服务器的C ++兼容性

我对Web服务器事务很陌生,而且相对来说是一个天真的C ++学生。 我现在正在做一个项目,我必须创build一个插件到现有的Web服务器。 这是一个公司的商业项目,也是我的单身论文项目。 我不太确定哪个Web服务器适合我的项目。 我正在寻找的networking服务器应该处理networking套接字,并将http或https请求作为对象,从中我想要开发的插件应该读取标头,url,数据和翻译(特别是SOAP和REST),因此对于公司的数据存储的文件系统API,反之亦然。插件必须使用C ++开发,服务器环境是Linux Cent OS 6.公司的普通员工从来没有使用过Linux服务器环境。 它是一家小公司。 他们以前只使用Windows和IIS Web服务器。 我们的项目经理不太愿意使用Apache,因为它的占用空间很大,速度很慢,而IIS不适合linux。 所以,我们正在寻找一个免费的Linux轻量级networking服务器。 我看到人们谈论了很多关于Nginx,G-WAN,Cherokee,Lightspeed,Varnish,Tntnet等的知识。但是我并没有真正发现任何关于这些Web服务器比较的判断力。 所以,请让我知道,哪个Web服务器将是我的首选。 等待回应。

printf()似乎在破坏我的数据

我在C编写一个nginx模块,并有一些超级离奇的结果。 我从我的模块中提取了一个函数来testing它的输出以及相关的nginxtypes/macros定义。 我在我的build_key_hash_pair函数中构build一个结构,然后在printf()的内容上执行printf() 。 当我printf内部printf的数据时, main的输出是有效的。 当我在内部函数中删除printf , main打印一个空string。 这是令人困惑的,因为在函数调用build_key_hash_pair我不对数据进行操作,除了显示它。 这里是代码: #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct ngx_str_t { size_t len; char *data; } ngx_str_t; typedef uintptr_t ngx_uint_t; typedef struct key_hash_pair { ngx_uint_t hash; ngx_str_t key; } key_hash_pair; #define ngx_string(str) { sizeof(str) – 1, (char *) str } #define ngx_str_set(str, text) \ (str)->len […]

NGINX每秒计数请求数

我正在为NGINX开发一个反应用层攻击模块,我必须每秒(每秒)计算一次请求数。 这个想法是使自动检测器的攻击,当请求率增加时,打开filter。 这个时候,这是在一个shell脚本的帮助下发生的,它正在每秒读取访问日志,并正在计算请求率。 问题是,这不是很有效的性能。 如果你有一个想法,我怎么能做到这一点,请分享你的想法。 谢谢!

一个nginx工作进程是否同时或一个地处理两个请求?

关于filter链的非常酷的部分是每个filter不等待前一个filter完成; 它可以处理前一个filter的输出,就像Unixpipe道一样。 (从这里 ) 我想上面是在每个filter的末尾谈论这样的代码: if (!chain_contains_last_buffer) return ngx_http_next_body_filter(r, in); 也就是说,nginx逐个链接filter。 但是,因为它在每个filter的末尾 ,所以必须等到当前filter完成。 我看不出nginx如何设法让each filter doesn't wait for the previous filter to finish 。 所以上面是关于nginxfilter的并发性,接下来是关于nginx请求处理的并发性: 正如我们所知,nginx使用epoll来处理请求: events = epoll_wait(ep, event_list, (int) nevents, timer); for (i = 0; i < events; i++) { … rev->handler(rev); } 用上面的代码,我不认为nginx可以同时处理两个请求,它只能一个接一个地完成(每个handler完成它的工作足够快,所以下一个请求得到很快处理),对吧? 还是有什么遗失我错过了?

哪一个有更好的代码基础来学习:nginx或lighttpd?

主要目标是从stream行的Web服务器代码库(用C实现)中学习,优先考虑结构/devise,而不是整个代码中的巧妙技巧。 我没有包含Apache,因为它的代码基础比上面提到的两个更大。