用C++开发网站/Web应用的2种思路


Coder Life Technologies

从纯静态网页,到aspx,到Flash网站,到php,到java,再到python,C++。经过了许多的取舍抉择。我更喜欢的还是C++。其次选择Java。

首先选择C++做网站,就要了解优势在哪里,劣势在哪里。

优势

安全 服务器上是编译好的二进制执行文件,就算别人获得了webshell,也无法简单地通过文本编辑器就对你的逻辑层进行改变,也无法窥探到你的逻辑层,而且因为是C++二进制执行文件,你还可以更灵活地比如让它自动判断运行环境,自我销毁、警告、报告给你它在哪个陌生的环境运行,用户是谁等等等等。总之相对其他的来说,理论上安全性绝对是最优的。

高效 其他的方案大多数是非编译语言,那么它们都需要相对应的二进制文件对其进行处理,各种解析之后得到结果,我们是直接的二进制执行文件,当然有人可能听说过C++的CGI性能低下,其主要原因是直接用传统CGI的思想,每次一个访问,就运行一个进程,启动结束进程本来就需要时间,到了并发多的时候更是直接把内存给爆了(应该说什么都能给爆了),但C++是强大的,我们可以让它以有限的进程数常驻在内存中,循环处理请求,每一个进程又可以以多线程的方式工作,而且每个进程只要维持一个数据库连接(实际上可以根据web服务器和数据库服务器的实际情况测量确定一个最优值),这样不仅可以保证不会崩掉数据库服务器,而且相比起每个请求都要建立一次数据库连接的方式(其他方案大多是如此),又能省掉建立数据库连接的时间,提速不少。而且你可以根据实际情况将任何读写较频繁的数据加载并常驻到进程的内存中实现最快的响应速度。实测在Apache Fastcgi和Nginx Fastcgi下,用上述方案和php分别完成最简单的数据库查询输出和包含文件,上述方案的效率比php快近3倍!上述方案是一种相当有效的高并发、高负载解决方案。如果你还嫌不够,可以连Apache、Nginx都省掉,直接写成httpd,当然这个我是不推荐的。

稳定 根据前面的叙述,显而易见。

强大 毫无疑问是最强大的,你可以使用任何C/C++库,你的程序功能和你其他的C/C++程序比,几乎没有任何缺失,只是用得到用不到的问题而已。

劣势

开发效率低 这是硬伤,C++的开发效率和它的执行效率一样是众所周知的,一般而言,开发效率与执行效率确实是成反比的。但这个能通过开发一些适当的库得以缓解,甚至能和php媲美,这就需要C++(和C++11)的一些特性了,这就是为什么选择C++而不是C的原因。

也许你还会说还有不易维护,不易调试等缺点,这也是存在的,但也是可以解决或缓解的。

好了,看到这里不知道你还有没有兴趣。如果你也想用C++来做网站的话,不妨参考以下我正在使用的2种思路(因为我已经将其实现都封装在了自己的库里,你可能需要花费额外的时间来让你的编译器能成功编译以下代码)。

思路1:

webroot的结构大致如下:

当用户访问网站时,不管uri是什么,都交由index.cgi处理,调用对应的函数,其中可能会读取html中的文件,这些文件可以用Django的模版语言。而这个文件夹是用户是没有访问权限的,因为它只供index.cgi读取并处理。js和css文件夹中就是静态文件。
这种思路非常像python的django开发的应用,只是把py文件变成cpp文件并编译成了二进制文件。非常方便移植。
(我是在了解python的web框架之前采用的这种方案,只不过html采用的不是Django的模版语言,而是自己随便定义的一套规范,仅有变量和判断功能,后来接触了Django之后,把html的书写规范改成了和Django一致)

思路2:
webroot的主体基本上就一个index.cgi不需要html、js、css,完全的C++风格编程。
其中cpp源码的urlproc部分如下:

编译成index.cgi后当用户访问任意url时,index.cgi都根据url调用对应的函数,然后生成css、js、html返回给浏览器。

希望此文能对你有所帮助,如果你觉得有收获,想进一步交流,可以通过侧边栏上的联系方式联系我。

中南大学全自动选课软件


Release

云计算版首次发布,尚处于测试阶段,请选课的时候使用此软件的同时像平时一样手动选课,以免因软件问题导致你耽误了时间。

下载地址:
中南大学全自动选课软件 – 云计算标准版 最新版:0.5.2.1版 (4/19/2012 13:47)
(适合个人使用)
http://www.box.com/s/0adb1b87c86617b3e01d

中南大学全自动选课软件 – 云计算高级版 最新版: 0.4.2.1版
(能同时帮100个人选课而速度和标准版差不多,但一个人用的话可能标准版表现更好)
http://www.box.com/s/9ca653d0ceb561d3619c
两个版本可以同时用,还可以加上传统的手工选课。

PS: 非云计算版(老版本)在高峰期能在3秒内完成选课,非高峰期半秒不到。云计算版代码全部重写,尚未测试。

关于UI版:
此类软件明显控制台版比UI版好用,原因嘛……控制台版双击就能开始工作,UI版每次运行还要输入(什么?不要每次运行都输入?那还要UI版干嘛。。。。。。)
所以说谁有兴趣的话可以做一个UI软件来和用户交互生成txt文本供我的选课软件使用。( 但我还是觉得直接改文本方便得多嘛 )

熬夜克星


Release

还在为常常下定决心要12点前睡觉但又总是做不到而烦恼吗?这个小工具说不定能帮到你哦,哈哈。

功能

熬夜克星会在每天晚上11点半提醒你去睡觉,并在12点强制将计算机进入休眠状态。并且早上8点前想尝试开机都会自动休眠。

注意事项:

需要打开休眠功能。
方法:开始菜单->附件->命令提示符 输入:powercfg -hibernate on  若不成功请自行百度(培养你自行解决问题的能力,哈哈)

FAQ

Q:电脑进入休眠状态后我该做什么?
A:拔掉电脑插头,然后洗洗睡吧

Q:我正在用记事本写东西,刚到12点,屏幕就黑了,我没保存的文本还在吗?
A:进入了休眠状态,只要你系统不出故障,下次开机后会和你进入休眠状态前是一个样子,你可以先从 开始菜单->休眠 尝试一下休眠功能

下载地址:

[Download not found]