spawn-fcgi与fcgi

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数据通信。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值