2010-07-18 42 views
2

說我有花哨的C語言編寫的新算法,我該如何最好地部署用C編寫的Web應用程序?

int addone(int a) { 
    return a + 1; 
} 

而且我想在

http://example.com/addone?a=5

與響應部署爲Web應用程序,例如,

Content-Type: text/plain 

6 

舉辦類似這樣的最佳方式是什麼?我有一個在Apache2上使用Python mod_wsgi的現有設置,並且爲了測試,我剛剛從C構建了一個二進制文件,並使用Python的os.popen2作爲子進程調用。

我想這是非常快速,不浪費開銷(即我根本不需要這個其他Python的東西)。我可以將整個服務器專用於它,重新編譯所需的任何東西等。

我在考慮研究Apache C模塊。這有用嗎?或者我可以構建SWIG包裝來直接從Python調用,但如果我根本不使用Python,這又會顯得浪費。有小費嗎?

回答

2

也許this微小的動態網絡服務器在C語言中可以使用C語言可以幫助你..它應該很容易使用和獨立。

根據主頁上顯示的基準,可能是最快的解決方案!

3

最簡單的方法應該是將該程序編寫爲CGI應用程序(http://en.wikipedia.org/wiki/.cgi)。它可以在任何支持通用網關接口的網絡服務器上運行。 輸出格式需要遵循CGI規則。

如果你想充分利用網絡服務器功能,那麼你可以用C編寫一個Apache模塊。這需要更多的準備工作,但是可以讓你完全控制。

1

article from yesterday有一個很好的討論,爲什麼不使用C作爲一個Web框架。我認爲對你來說一個簡單的解決方案就是使用ctypes,這肯定比開始一個子進程更快。你應該確保你的方法是線程安全的,並且你檢查你的輸入參數。

from ctypes import * 
libcompute = CDLL("libcompute.so") 
libcompute.addone(int(a)) 
0

我不相信你現有的一般方法可能不是最好的。我並不是說Apache/Python必然是正確的,但是在整個系統中,由高度專注的元素組成的高度集中的元素組成的架構中存在一些令人信服的分離問題。

讓您的基於C的算法服務器與HTTP服務器分離可能會讓您訪問諸如HTTP可伸縮性和緩存設施等內容,否則這些內容可能必須在算法組件中進行工程設計(或重新創建)緊密耦合。

我不認爲在設計架構時,性能問題始終是最好的或唯一的原因。例如,帶有基於C驅動程序的a YAWS deployment可能是一個非常高性能的選項。

0

我剛剛使用libmicrohttpd設置了一個web服務,並且有驚人的結果。在四核處理器上,我一直處理20400個請求,而CPU只能運行在58%。這可能會部署在8核心的服務器上,所以我期待更好的結果。一個非常簡單的C服務將會更快!

我已經嘗試過GWAN,它非常好,但它已關閉,並且在虛擬環境中運行不佳。儘管如此,我會給@Gil的榮譽善於支持它。我們遇到了一些問題,發現LibMicroHttpd可以更好地滿足我們的需求。

如果你走在這裏,你可能需要如果你使用CentOS的從axivo

rpm -ivh --nosignature http://rpm.axivo.com/redhat/axivo-release-6-1.noarch.rpm 
yum --disablerepo=* --enablerepo=axivo update openssl-devel