使用Nginx+CppCMS构建高效Web应用服务器

作者在 2017-03-23 17:53:25 发布以下内容

哈哈,欢迎大家访问、攻击:测试页面  直接地址    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)插入数据
cppdb::pool::pointer my_pool = cppdb::pool::create("mysql:host=127.0.0.1;database=test;user=root;password='your password'");
cppdb::session sql(my_pool->open());
                
cppdb::statement stat;
stat = sql << "INSERT INTO t_test(test_name) VALUES(?) " << test_name;
stat.exec();


(4.2)检索数据
    string query = "SELECT test_name FROM t_test order by id desc limit 5";
    cppdb::result res = sql << query;

    result = "<ol>";

    while(res.next()) {
        std::string test_name;
        res >>test_name;
        result += "<li>"+test_name+"</li>";
    }

    result += "</ol>";

(5)编译
g++ -Wall hello.cpp view.cpp -o hello -lcppcms -lbooster

(6)配置文件config.js
"service" : { }
{
    "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/hk;
    }

}
(9.3)使用新的配置文件启动Nginx后可以做如下测试:
(A)http://ec2-35-164-231-255.us-west-2.compute.amazonaws.com     这个导向了Nginx提供的静态页面
(B)通过Js获取初始数据,并且可以提交数据


这样做的好处还有:
(1)减少服务器计算压力
(2)减少带宽使用
(3)前后端完全分离,这个好处并没有增加前端的开发任务量,前端完全可以使用目前流行的框架快速开发。
(4)减少臃肿的服务系统架构。可以减少80%的机房硬件。200万/年的IT硬件费用可以用50万/年支撑的更好。

web | 阅读 1560 次
文章评论,共0条
游客请输入验证码
浏览1560次
文章归档
最新评论