使用Nginx+CppCMS構建高效Web應用服務器


使用Nginx+CppCMS構建高效Web應用服務器(之一)

本文是作者原創,轉載請注明出處!

 

系列之二:

使用Nginx+CppCMS構建高效Web應用服務器(之二)

 

哈哈,歡迎大家訪問、攻擊:http://ec2-35-164-231-255.us-west-2.compute.amazonaws.com

1:Why

當前,越來越多的網站使用了各種框架,大部分框架使用了腳本語言、半編譯語言等。比如Java、Python、Php、C#.NET等。
這些框架大部分目標是解決快速開發、運行穩定。但是,缺點是:系統龐大、運行耗費資源多、運行效率低下、占用帶寬大等。
本文提出一種新的Web應用解決方案,試圖針對以上缺點進行優化。

完全使用靜態頁面,動態數據通過Ajax訪問CppCMS提供的高效Rest服務由瀏覽器獲取。
這樣,
(1)CppCMS提供Rest服務。CppCMS使用編譯后的機器碼運行,
效率大大提高,平均性能大概是其他語言的10倍以上(http://cppcms.com/wikipp/en/page/benchmarks)
(2)使用Json傳輸數據。由客戶端組織展示數據,降低服務器計算時間,降低帶寬使用。否則,所有HTML數據都是在
服務端生成,服務端計算壓力大,並且完整的HTML數據比直接傳輸數據要少得多。
(3)靜態數據使用Nginx服務器,可以使用優秀的Nginx性能提供穩定的服務。

以下是比較傳統方法和本文提出的方法:

2:How

本文以AWS EC2的Redhat Enterprise 為例描述整個操作過程:

(1)安裝CppCMS+CppDB,安裝過程CppCMS官網文檔比較詳細,不復雜,此不贅述。

(2)安裝Mysql和Mysql client

(3)創建建數據庫、表的腳本,使用腳本建立數據庫、表

(4)程序(以CppCMS的例子程序forms為藍本):

(4.1)插入數據

1 cppdb::pool::pointer my_pool = cppdb::pool::create("mysql:host=127.0.0.1;database=test;user=root;password='your password'");
2 cppdb::session sql(my_pool->open());
3 
4 cppdb::statement stat;
5 stat = sql << "INSERT INTO t_test(test_name) VALUES(?) " << test_name;
6 stat.exec();

 (4.2)檢索數據

 1 string query = "SELECT test_name FROM t_test order by id desc limit 5";
 2 cppdb::result res = sql << query;
 3 
 4 result = "<ol>";
5 while(res.next()) { 6   std::string test_name; 7   res >>test_name; 8   result += "<li>"+test_name+"</li>"; 9 }
10 result += "</ol>";

 

(5)編譯

g++ -Wall hello.cpp view.cpp -o hello -lcppcms -lbooster

(6)配置文件config.js

{
  "service" : {
    "api" : "http",
    "port" : 8080
  },
  "http" : {
    "script" : "/hello"
  },
}

 

(7)運行

./hello -c config.js


(8)測試


http://ec2-35-164-231-255.us-west-2.compute.amazonaws.com:8080/hello/
此處注意,要去AWS EC2的控制台的安全組里設置8080端口開放,否則無法訪問。
我們這里還開放Http 80端口,為Nginx監聽端口。

(9)配合Nginx提供靜態數據,並提供Rest服務的反向代理

(9.1)安裝Nginx


(9.2)配置Nginx

 

server {
    location / { #提供靜態頁面
        root /data/www;
    }

    location /hello/ { #反向代理到CppCMS的Rest服務
        proxy_pass http://localhost:8080/hello;
    }

    location ~ \.(gif|jpg|png)$ { #圖像
        root /data/images;
    }
}

 

(9.3)使用新的配置文件啟動Nginx后可以做如下測試:


(A)http://ec2-35-164-231-255.us-west-2.compute.amazonaws.com 這個導向了Nginx提供的靜態頁面
(B)使用ajax提交和獲取數據


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM