哈哈,欢迎大家访问、攻击:http://ec2-35-164-231-255.us-west-2.compute.amazonaws.com/hello
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()) {
- 6std: :string test_name;
- 7res >> test_name;
- 8result += "<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)http://ec2-35-164-231-255.us-west-2.compute.amazonaws.com/hello 这个导向了 CppCMS 提供的一个页面,可以输入名称,点击提交,把数据保存
(C)使用 Ajax 的目前还没有实现,等下次再说
来源: http://www.cnblogs.com/lightex/p/6560880.html