我用C使用fastcgi.com的API製作了FCGI程序。我已經打電話FCGI_Accept
像文檔說。當我運行得到的可執行文件時,它就像CGI程序一樣運行,然後退出。用於產生FCGI服務器的C API?
我需要在UNIX域套接字上監聽的Web服務器的API。我正在使用nginx
,它自己並沒有產生FCGI程序和fastcgi.com的API庫。我不想用其他服務器或庫來產生我的FCGI程序。
我用C使用fastcgi.com的API製作了FCGI程序。我已經打電話FCGI_Accept
像文檔說。當我運行得到的可執行文件時,它就像CGI程序一樣運行,然後退出。用於產生FCGI服務器的C API?
我需要在UNIX域套接字上監聽的Web服務器的API。我正在使用nginx
,它自己並沒有產生FCGI程序和fastcgi.com的API庫。我不想用其他服務器或庫來產生我的FCGI程序。
我遇到了同樣的問題,試圖啓動使用nginx使用fcgi_stdio庫編寫的FastCGI應用程序。如果我通常啓動應用程序,它就像正常的CGI一樣,並立即退出。我不確定通常使用什麼祕密醬來讓應用程序像http守護程序(而不是CGI)一樣採用FastCGI而不是CGI,但是spawn-fcgi這樣做。它可以在EPEL存儲庫中用於RHEL/CentOS/Amazon Linux /等。我不知道這是否有助於你的情況,但這是我最終使用的結果。
Unixman,nginx不會自己產生FCGI服務。您的程序需要啓動並且有一個主循環,它將接受FastCGI請求。 Nginx會將這些請求轉發給您的軟件。
如果你想要一個簡單的方法來做到這一點(雖然代碼是C++而不是C!),你可以使用(F)CGI kit或Wt FCGI kit。這兩個都可以/將會爲你處理主循環,然後你只需要在處理函數中調用你的C代碼。
我沒有使用框架。我正在使用fastcgi.com上的FCGI API。它所要做的就是調用'FCGI_Accept',但這不起作用。它只是像一個正常的CGI運行,然後退出。 – unixman83 2012-03-26 20:39:31
只需創建一個unix域套接字偵聽器並將套接字描述符複製到STDIN_FILENO即可。
dup2(socket, STDIN_FILENO);
while(FCGI_Accept() >= 0) {
/* ... */
}
只需按照以下步驟 -
這裏是完整的工作示例 -
#include <fcgi_stdio.h>
#define PATH_SOCKET "/tmp/hello.sock"
int main() {
int sock = FCGX_OpenSocket(PATH_SOCKET, 10);
FCGX_Request request;
FCGX_Init();
FCGX_InitRequest(&request, sock, 0);
while (FCGX_Accept_r(&request) == 0) {
FCGX_FPrintF(request.out, "Content-Type: text/plain\r\n\r\n"
"Hello World!\r\n");
FCGX_Finish_r(&request);
}
return 0;
}
fastcgi程序從任何其他程序開始(即,通過'main')。您需要配置您的HTTP服務器以將其作爲FastCGI應用程序啓動。 – 2012-03-25 20:18:43
@BasileStarynkevitch nginx不生成FastCGI應用程序。 – unixman83 2012-03-25 20:33:54
這意味着'ngnix'可能不支持FastCGI,否則需要FastCGI應用程序從外部啓動(例如,通過您的系統啓動腳本,例如在/ etc/init.d /中)。那麼啓動FastCGI應用程序仍然是一個系統管理員問題,這個問題不屬於這裏(因爲它與編碼無關)。 – 2012-03-25 22:01:08