c++ - FastCGI 如何在 Web 服务器上工作(例如 Apache 2.2+)?

标签 c++ c apache fastcgi

我查看了 FastCGI (fcgi-2.4.0) 的来源,实际上没有 fork 的迹象。 如果我是正确的,Web 服务器会为 FastCGI 模块生成一个进程(在其中编译或作为 SO/DLL 加载)并处理对主套接字(通常是 TCP:80 端口)的控制。

在 *nix 上,FastCGI 模块在整个文件描述符(实际上是监听套接字)上使用文件写锁(libfcgi/os_unix.c:989)“锁定”该套接字;这样,当新连接获得时,只有 FastCGI 模块能够处理这些。 传入的套接字锁在移交给 HTTP 请求处理之前被释放。

FastCGI 模块不是多进程/线程(没有 internal 使用 fork/pthread_create)我假设多个同时连接的并发处理是通过从 Web 服务器生成的(通过 OS_SpawnChild ) n 个 FastCGI 模块进程。 例如,如果我们生成 3 个 FastCGI 进程(Apache 调用 3 x OS_SpawnChild),这是否意味着我们最多只能同时处理 3 个请求?

A) 我对 FastCGI 工作方式的看法是否正确?

B) 如果操作系统产生新进程/创建与本地数据库的连接的成本可以忽略不计,那么 FastCGI 相对于老式可执行方法的优势是什么?

谢谢, 艾玛! :-)

最佳答案

FastCGI 相对于普通 CGI 的速度增益是进程是持久的。例如如果您有任何要打开的数据库句柄,您可以执行一次。任何缓存都一样。

主要的收获来自不必创建新的 php/perl/etc。每次都要翻译,这花费了惊人的时间。

如果您想处理多个并发连接,则必须运行多个进程 FastCGI 进程。 FastCGI 不是一种通过任何类型的特殊并发处理更多连接的方法。这是一种加速单个请求的方法,这反过来将允许处理更多请求。但是是的,您是对的,更多并发请求需要运行更多进程。

关于c++ - FastCGI 如何在 Web 服务器上工作(例如 Apache 2.2+)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1222510/

相关文章:

c++ - 生成文件:特定的 'no input files',自动变量

c++ - C++中的模板类和函数重载

windows - 使用 MSysgit 的 Perl 解释器在 Windows 上的 Apache 下 GitWeb 非常慢

apache - 在代理后面运行 keycloak 时 token 颁发者无效

c++ - CUFFT_ALLOC_FAILED nsight eclipse中的错误

c++ - 关联容器的C++入门5ed equal_range

c - 为什么我的程序执行后不输出信息

c - C 中的动态数组函数 - 设置容量并创建更大的数组

c - 如何使用Wifi udp套接字编程来控制鼠标指针

linux - 在 SUSE 上使用评论板进行 subvertpy 安装