FastCPP -- C++ Web Development Environment
Powered By Apache2
Jsp,Asp,Asp.net,Php,Perl,Python,Ruby on Rails,FastCGI, and FastCPP.
FastCPP是一個甚於Apache(現在只支援Apache2)的C++ Web開發環境,利用FastCPP可以快速的開發出高效能的Web應用,提供了Cookie,session還有動態開發以及混嵌HTML的功能。
和其他Web開發語言的對比.
優勢:
1).基於C++,擁有STL,Boost以及Loki等強大開發庫的支援。
FastCPP並不是一個新的指令碼語言,只是一個支援混嵌HTML的C++虛擬碼,通過FastCPP的翻譯功能,將FastCPP的代碼翻譯成c++的
源檔案,並調用g++編譯成動態連結程式庫。所以,你可以直接使用你熟悉的C++文法,使用強大的STL以及直接使用系統調用,擁有比任何一個WEB開發語言
更強大的程式庫 .
2).可以提供高效能的WEB服務能力。
FastCPP是基於Apache2的Module開發的,由FastCPP的偽檔案編譯成的動態連結程式庫直接由進程直接使用,在效能上和寫module是
一樣的。理論上效能會遠在jsp,php,perl以及fastcgi之上,因為jsp,php,perl是指令碼引擎來執行,而FastCGI是通過
FastCGID來維護cgi,將cgi的運行結果通過管道來傳給
apache2,所以儘管FastCGI可以使用C語言來增加語言本身的效能,但通過管道的傳輸也會成為FastCGI的瓶頸之一.
FastCPP沒有明顯的效能瓶頸,因為FastCPP的最終的程式都是Apache2進程的一部分,不經過管道之類的傳輸資料,而是在進程內直接傳遞,所以比FastCGI有更多的優勢。
3).快速的開發過程。
只要配置好Apache2,寫好FastCPP的虛擬碼放在web目錄下就可以直接存取,並得到結果,FastCPP第一次訪問時需要編譯,所以在速度上會很明顯的慢,在第二次訪問之後就不需要編譯,已經和Apache2的主進程結合成一個進程。
FastCPP支援HTML混嵌,可以像編輯HTML一樣的編輯FastCPP的頁面。而且提供了編譯參數的設定,完成可以按照MVC的理念來開發程式,
4).完整的功能支援.
FastCPP支援cookie和session這兩個強大的功能,你可以把你需要的變數存在session裡,在兩個不同的頁面中共用。
缺點:
1).不支援其他的開發語言,只支援C++語言,預設的編譯器是g++. ^^
2).受到進程概念的影響。只支援Apache2的Single-Process Multi-Thread的Worker的單進程多線程的工作方式。
因為FastCPP依賴的兩個全域變數,pages 和
sessions分別是fastcpp的頁面緩衝和session管理器,如果使用
Multi-Process的話,一但Apache2根據負載情況fork出新的進程,兩個進程間的pages和sessions就是兩個不同的單元,對
sessions的唯一性的破壞是可想而知的,所以就只能選擇Single-Process,不過很幸運的是,Worker是apache2推薦的高效能
的MPM。
或許FastCPP在將來會提供一個功能更強,效能也比較優秀的MPM。
3).暫時不支援FastCPP的叢集,不過在以後的開發中,會加入這個功能。
4).暫時不支援apache1.x,會支援的
5).暫時不支援除Linux之外的作業系統,也會支援的。
6).現在FastCPP和Apache2是綁定在同一個進程的,所以如果page的記憶體訪問錯誤會直接導致Apache2的崩潰, 這是挺嚴重的,風險也很大.所以在選擇FastCPP,你要自己小心。不過,充分利用C++語言的強大功能,我想很容易避免這些問題的。
如何獲得和安裝FastCPP?
FastCPP在將來是支援跨平台的,只不過只支援Linux,所以現在,你只能用Linux來使用FastCPP.
1.獲得源碼.
FastCPP是遵守GPL的要求而發布的代碼。
apache2.你需要一份apache2的源碼,你可以在httpd.apache.org中下載,我使用的httpd-2.0.54
fastcpp.在http://dragon.linux-vs.org/~jinti/fastcpp-0.0.1.tar.gz 中獲得。
2.安裝
1).apache2的安裝
jinti@heaven:~$tar jxf httpd-2.0.54.tar.bz2
jinti@heaven:~$cd httpd-2.0.54
jinti@heaven:~/httpd-2.0.54$ ./configure --with-mpm=worker
jinti@heaven:~/httpd-2.0.54$ make && make install
2).fastcpp的安裝
jinti@heaven:~$tar jxf fastcpp-0.0.1.tar.gz
jinti@heaven:~$cd fastcpp-0.0.1
jinti@heaven:~/fastcpp-0.0.1$./configure && make && make install
fastcpp安裝之後你需要在httpd.conf加上
LoadModule fastcpp_module modules/mod_fastcpp.so
AddHandler fastcpp-script .fc
這樣,就可以調用副檔名為.fc的fastcpp指令碼了.
3.運行
首先你要運行apache2.
./apachectl -DONE_PROCESS -k start
#一定要加上-DONE_PROCESS 否則有可能會產生兩個sessionmaps影像,這是錯誤的。
在apache2/htdocs 下建一個hello.fc
jinti@heaven:~$ cat apache2/htdocs/hello.fc
<%@inc "-I/usr/include/"%>
<%@link "-L/usr/lib/" %>
<%@comp "-O2" %>
<%!
#include <iostream>
using namespace std;
static int i = 0;
%>
<html>
<head>
<title>Thank you for choicing FastCPP</title>
</head>
<body>
<%
page<<"<B>Hello,FastCPP "<<i++<<"<BR></B>"<<endl;
%>
</body>
</html>
開啟你的瀏覽器訪問http://127.0.0.1/hello.fc就可以看到運行結果了.