2011-08-03 98 views
1

我在寫一個C++ HTTP服務器。但是因爲在C++中開發比較慢,比如在PHP中,我想也支持FastCGI應用程序(PHP通過FastCGI,Python通過FastCGI等)。所以我想使用類似於mod_fcgi(對於Apache)的東西。有人知道一個好的C++ FastCGI庫(不是用於應用程序,而是用於網絡服務器)?我使用Poco庫來編寫Web服務器。如何使用FastCGI應用程序擴展C++ HTTP服務器?

另一種解決方案可能是直接在我的C++服務器中使用PHP解釋器。有人知道這個例子嗎?

所有解決方案都必須考慮到性能。

+0

只是好奇,你爲什麼要寫一個HTTP服務器? – dgnorton

+0

@dgorton我們需要一個高性能的網絡服務器(包括一個CMS系統)。包括我們自己的分析版本等等。但是由於C++開發速度較慢,我們希望在PHP中執行一些部分(首先,以後可以用C++替換它們)。 – VDVLeon

+0

apache,IIS,nginx,lighthttpd,mongoose等全都證明太慢了? – dgnorton

回答

0

我找不到FastCGI客戶端,所以我自己寫了。 這是很多工作,但我成功:) 它是一個簡單的舊CGI(杜!)快很多。

+0

如果您可以添加代碼鏈接或在可能的情況下將其複製到此處,將會很好。 – 2011-09-06 04:05:22

+0

是的請! FastCGI規範是可怕的 - 我的意思是,協議很簡單,但規範... – djfm

+0

你發佈在github上嗎? – Aif

1

如果您使用C++編寫CMS系統,則應該使用C++結帳CppCMS web framework,其似乎非常快。

如果您想從頭開始做更多的事情並編寫HTTP服務器,boost有一些關於如何設置HTTP服務器here的示例。

現在如果你想使用CGI這是最慢的選項,那麼有一個用於處理CGI的GNU Cdicc庫。

+0

我已經有一個很棒的HTTP服務器庫(來自Poco的HTTPServer)。不過謝謝。關於GNU Cdicc,它似乎是用於創建(快速)CGI應用程序,而不是用於使用此應用程序的Web服務器。 – VDVLeon

1

昨天我一直在看這個話題。正如您所知,fastcgi是通過tcp或unix套接字構建的,以等待與特定協議的連接。

請求的方案如下:客戶端連接到連接到fastcgi應用程序的web服務器。 根據實現方式(規格說,Web服務器提供了連接到Web客戶端(在accept()的sockfd)到FastCGI applciation。我還沒有看到nginx的這樣一個行爲的文件描述符。

你怎麼可以嘗試?

  1. 安裝nginx的(配置很簡單,看documentation
  2. 編譯PHP(一個簡單的./configure --enable-fastcgi的& &化妝就行了。需要30秒對我來說)
  3. 本地主機端口9000上推出php-cgi./sapi/cgi/php-cgi -b 127.0.0.1:9000
  4. tcpdump的/ Wireshark的輸出
  5. 如今停止PHP,並運行一個簡單的TCP服務器(例如nc -l 9000

我發現fcgi specification是,如果你非常有用想寫自己的圖書館。我還沒有找到用於fcgi客戶端的C/C++代碼,但是可以很容易地找到perl。

+0

謝謝。我也在看SCGI。因爲SCGI作爲FastCGI更容易實現。我讓你們都知道結果是什麼。 – VDVLeon