当前位置: 首页 > 工具软件 > spawn-fcgi > 使用案例 >

spawn-fcgi与fcgi

齐涛
2023-12-01

spawn-fcgi与fcgi

原理有两点:

  1. 子进程会继承父进程打开的文件描述符资源,从而将spawn-fcgi打开的监听套接字传递给fcgi;
  2. 利用宏定义重新架构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数据通信。

 类似资料: