使用Nginx+CppCMS构建高效Web应用服务器
来源:互联网 发布:java培训ujiuye 编辑:程序博客网 时间:2024/05/29 02:54
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)http://ec2-35-164-231-255.us-west-2.compute.amazonaws.com/hello 这个导向了CppCMS提供的一个页面,可以输入名称,点击提交,把数据保存
(C)使用Ajax的目前还没有实现,等下次再说
- 使用Nginx+CppCMS构建高效Web应用服务器
- 使用Nginx+CppCMS构建高效Web应用服务器
- 构建高效安全的Nginx Web服务器
- 构建高效安全的Nginx Web服务器
- 构建高效安全的Nginx Web服务器
- 使用nginx构建rtmp服务器
- 构建基于Nginx的web服务器
- 构建基于Nginx的web服务器
- 使用uWSGI Web服务器和Nginx部署Python WSGI应用
- 使用Lineman构建web应用
- 使用Maven构建Web应用
- 使用Nginx搭建WEB服务器
- 搭建高效WEB服务器(Linux+Apache+Squid+Nginx)
- 案例:Nginx作为Web缓存服务器应用
- 《移动Web前端高效开发实战》笔记2——使用Gulp构建一个ECMAScript 6和Sass应用
- CppCMS和Nginx协同工作
- CppCMS和Nginx协同工作
- Nginx配置静态服务器与WEB应用服务器映射
- Metadata Service 最高频的应用
- Azure Messaging-ServiceBus Messaging消息队列技术系列5-重复消息:at-least-once at-most-once
- Leetcode 412. Fizz Buzz
- JavaWeb从0开始学(二)-----JSP基本语法与编译指令
- Visual Studio 2015/2017 与ASP.NET CORE 联合创建具有SPA模式的Angular2模板
- 使用Nginx+CppCMS构建高效Web应用服务器
- Leetcode 496. Next Greater Element I
- 移动直播技术秒开优化经验(含PPT)
- 33 Search in Rotated Sorted Array
- 什么叫“748工程“?北大方正盗窃火星人源代码的真实含义
- 技术的未来
- 智能图书画像系统
- 如何在Mac OS系统下搭建Java开发环境 配置Java环境变量
- Unity+Kinect结合进行开发教程