spawn-fcgi与fcgi
spawn-fcgi与fcgi
原理有两点:
- 子进程会继承父进程打开的文件描述符资源,从而将spawn-fcgi打开的监听套接字传递给fcgi;
- 利用宏定义重新架构fcgi的标准输入输出,从而将标准输入输出转变为对文件描述符的读写操作;
代码实现
spawn-fcgi创建进程
首先通过bind_socket()
函数创建监听套接字;
创建完毕监听套接字后就调用fcgi_spawn_connection()函数,该函数负责切换为对应的fcgi程序,以及重定向一些文件描述符:
// 如果fcgi_fd不是FCGI_LISTENSOCK_FILENO,那就通过dup2进行文件描述符的转变,核定一点的就是这个:
if(fcgi_fd != FCGI_LISTENSOCK_FILENO) {
close(FCGI_LISTENSOCK_FILENO);
dup2(fcgi_fd, FCGI_LISTENSOCK_FILENO);
close(fcgi_fd);
}
注意这里有个宏:FCGI_LISTENSOCK_FILENO,这个宏就是fcgi中监听套接字的文件描述符;
基于fcgi框架的程序编写
FCGI_Accept这个函数会基于FCGI_LISTENSOCK_FILENO监听套接字文件描述辅助进行accept,接着将accept到的连接设置到fcgi的输入输出文件描述符变量上,最后主流程就基于这个连接套接字进行与nginx服务器的socket数据通信。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话