我对 nginx 和 Perl FCGI 模块有一点问题。我在我的 FCGI 程序中有一个很长的操作,它可能比我用来通信 FCGI 的 Unix 套接字另一端的服务器(或服务器上的用户)寿命更长。如果 FCGI 请求关闭,我需要在我的程序中使用 FCGI accept() 循环来中断。我尝试安装 INT、TERM 等信号处理程序,但它们什么也没做,因为 nginx 和我的程序之间的唯一通信是通过 FCGI 套接字 AFAIK 进行的。
我也试过这个,但是我看不到使用 Perl 中的 FCGI 模块通过 FCGI 套接字向 Nginx 发送原始数据或从 Nginx 发送原始数据。有没有一种方法可以在不修改 FCGI 模块以具有“ping”功能的情况下做到这一点?
基本问题是我的程序不知道 nginx 是否终止了 FCGI 请求。
例子:
#!/usr/bin/perl -w
use strict;
use FCGI;
my $fcgi_socket = FCGI::OpenSocket( '/tmp/test.socket', 100000 );
my $request = FCGI::Request(\*STDIN, \*STDOUT, \*STDERR, \%ENV, $fcgi_socket);
REQUEST: while($request->Accept() >= 0) {
#begin handling request
my $result = '';
while (1) { #or select(), etc
if (somehow check whether the fcgi $request is still live) {
next REQUEST;
}
#check for results, set $result if done
}
print $result;
}