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

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" : {
"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应用服务器的更多相关文章

  1. 使用Nginx+CppCMS构建高效Web应用服务器(之二)

    使用Nginx+CppCMS构建高效Web应用服务器(之二) 上一篇 使用Nginx+CppCMS构建高效Web应用服务器(之一) 大致介绍了网站的整体架构,实际上通过调用REST获取数据并没有实现. ...

  2. 使用Nginx+CppCMS构建高效Web应用服务器(之三)

    使用Nginx+CppCMS构建高效Web应用服务器(之三) --充分利用服务器和客户端计算能力 欢迎测试,攻击:http://www.litelottery.com     网页右上角,选择博彩,演 ...

  3. OpenResty全功能Web应用服务器,打包了标准的 nginx 核心

    OpenResty打包了标准的 nginx 核心,很多的常用的第三方模块,以及它们的大多数依赖项. 通过揉和众多设计良好的 nginx 模块,OpenResty 有效地把 nginx 服务器转变为一个 ...

  4. Nginx+Tomcat构建动、静分离WEB架构

    一.简介 二.环境介绍 三.后端服务器安装配置 四.安装论坛 五.安装配置前端Nginx服务器 六.验证服务 一.Tomcat简介 Tomcat是Apache 软件基金会(Apache Softwar ...

  5. 【读书笔记】2016.12.10 《构建高性能Web站点》

    本文地址 分享提纲: 1. 概述 2. 知识点 3. 待整理点 4. 参考文档 1. 概述 1.1)[该书信息] <构建高性能Web站点>: -- 百度百科 -- 本书目录: 第1章 绪论 ...

  6. OpenResty 是一个全功能的 Web 应用服务器

    OpenResty (也称为 ngx_openresty)是一个全功能的 Web 应用服务器.它打包了标准的 Nginx 核心,很多的常用的第三方模块,以及它们的大多数依赖项. 通过众多进行良好设计的 ...

  7. 生产环境优雅的重启基于Nginx、Tornado的Web服务进程

    Nginx是一个高效的Web服务器及代理服务器,Tornado是一个基于epoll的异步Web开发框架,通常使用Nginx做为Web服务器时,都会以FastCGI模式,而我们从开发.调试.运维的角度考 ...

  8. windows+nginx+iis+redis+Task.MainForm构建分布式架构 之 (nginx+iis构建服务集群)

    本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,由标题就能看出此内容不是一篇分享文章能说完的,所以我打算分几篇分享文章来讲解,一步一步实现分 ...

  9. JSP之WEB服务器:Apache与Tomcat的区别 ,几种常见的web/应用服务器

    注意:此为2009年的blog,注意时效性(针对常见服务器)     APACHE是一个web服务器环境程序 启用他可以作为web服务器使用 不过只支持静态网页 如(asp,php,cgi,jsp)等 ...

随机推荐

  1. 各个浏览器开启CSS Grid Layout的方式

    2017年3月,Chrome.Firefox将开启默认支持. 当然对于很多人等不及浏览器默认支持,想提前体验一把,这里提供一些打开方式: 1.Chrome 在浏览器中输入:chrome://flags ...

  2. CodeForces757A

    A. Gotta Catch Em' All! time limit per test 1 second memory limit per test 256 megabytes input stand ...

  3. Chrome 插件集锦

    原文出处:CN_Simo 子曾曰:"工欲善其事,必先利其器.居是邦也."--语出<论语·卫灵公>:其后一百多年,荀子也在其<劝学>中倡言道:"吾尝 ...

  4. KB奇遇记(9):艰难的上线

    经历了非常多的磨难,系统也“如约“在2017年01月01日勉强上线了.尽管我认为它还不到上线的程度,条件不具备,但上头的指令下来和计划便是在这一天.整个上线过程从2016年3月8号开始到上线日,扣除中 ...

  5. WdatePicker 日历控件使用方法+基本常用方法

    WdatePicker 日历控件使用方法+基本常用方法,记录一下. 很好的文章. 网上转来的. 1. 跨无限级框架显示 无论你把日期控件放在哪里,你都不需要担心会被外层的iframe所遮挡进而影响客户 ...

  6. 如何在linux下制作一个windows的可启动u盘?

    如何在linux下制作一个windows的可启动u盘? 情景是这样的,有一个windows10的iso,现在想通过U盘安装,要求即支持UEFI(启动引导器),又支持Legacy(启动引导器),因为有一 ...

  7. 读书笔记 effective c++ Item 1 将c++视为一个语言联邦

    Item 1 将c++视为一个语言联邦 如今的c++已经是一个多重泛型变成语言.支持过程化,面向对象,函数式,泛型和元编程的组合.这种强大使得c++无可匹敌,却也带来了一些问题.所有“合适的”规则看上 ...

  8. Linux系统(三)系统基础扫盲大全

    序言 如果大家都爱装逼,一般会偏爱使用安装最小化的liunx系统,那么你的系统就不带图形化的桌面功能,这样对于一个想装B的初学者来说,Liunx就是黑漆马虎,一望无际的黑屏,黑屏,如何快速的对liun ...

  9. orcale 之 SQL 语言基础

    SQL 全称是结构化查询语句(Structure Query Language),是数据库操作的国际化语言,对所有的数据库产品都要支持. SQL 语言的分类 我们按照其功能可以大致分为四类: 数据定义 ...

  10. ubuntu通过虚拟域名访问不了 502 / 网络错误

    ##之前把虚拟机的lamp环境搭建好,但是通过自己windows在浏览器访问一直不能正常运行. 简单说明一下我的相关设置: 1.设置windows的ip映射 C:\Windows\System32\d ...