我为学校内的几个大ftp写了个简单的搜索引擎, 用c++写的, 今天打算做一个web界面, 不是很复杂, 又懒得去用php, rails什么的, 所以就决定用c++写cgi, 但cgi弊端很多, 所以我想到了用fastcgi, 在研究的过程中另外又找到了一个cgicc的库, 发现相当好用, 突发奇想是不是可以实现一套c++的web应用框架.

可能用c++写b/s意义不大, 不过我觉得:
1.现在stl库,boost库已经把c++扩充得很强大, 动态语言的一些优点不再那么令人神往了.
2.c++连本地数据库速度还是挺爽的, 配合sqlite3不错, 不是说b/s主要瓶颈在io上吗?
4.我最近做的几个b/s程序都是用了大量的ajax, 所以c++的任务就是生成xml或json, 这些应该都有很方便的库.
3.c++也有很好的ide, 我用vc9express觉得相当不错, 不管是编码还是调试, rails最好的ide netbeans速度还是有点不爽
4.fcgi的编程风格也容易写出mvc这种模式
5.适合过分饭c++的人,过分追求速度的人,虽然用c++写出的b/s程序不一定比rails快多少, 但是多少能满足有些人的bt心理, 呵呵

下面是我程序的几个部分:
1.dll, 主要用来处理业务逻辑, 主要导出函数为dispatcher
2.主程序, 主要是fcgi主循环, 页面被访问之后循环开始, 显示调用调用dll的dispatcher解析http请求, 这样程序在开发的过程中基本不用杀掉fcgi进程
3.html,css,images..., 这些不是c++了, 可以用其它的工具来做
4.测试程序, 不是单元测试(我这方面经验还不足). 分两种, 一个是普通cgi, 因为fcgi主程序一旦调用, 关闭比较麻烦, 需要杀掉一个apache进程和一个fcgi进程, 用普通cgi就方便了; 另一种是一个本地程序, 模仿主程序显示调用dll, 这主要是为了方便调试dll, 用vc调试还是相当方便的.

另外我还有一些想法:
1.因为主程序中的静态变量是被所有的fcgi主循环共享的, 所以这里可以放一些共享数据, 缓存一些东西
2.不一定所有地方都用ajax, 纯用c++生成或者纯的html模板可能方便性不是很高, 可以考虑在html模板中假如一些模板语言, 自己定语法用c++解析可能速度不一定快, 用一些简单的又可以用c++执行的动态语言呢? 比如说lua? 其实用c++生成json放到页面里让javascript自己去处理也行


我的想法不一定很成熟, 只是因为很喜欢c++, 也熟悉b/s开发, 看看有没有途径让c++也可以方便的写b/s程序

欢迎拍砖!
评论
andrewleung 昨天
QQ秀上面的网页、CGI好像基本都是C/C++
xtcn 2008-05-12
wps2000 2008-05-09
luolonghao 写道
neora 写道
ozzzzzz 写道
说实在的,我觉得任何编译语言,做web应用都不会很爽。即便是java这个东西,也是如此。比较起来还是动态的脚本语言比较现实和有效率一些,特别是在硬件便宜的今天。

写个论坛当然PHP比较爽拉。写Web ERP用PHP,到后来就烦死了。


PHP写企业应用确实找死,呵呵。
就说读写EXCEL、打印PDF文件,以前没有很好的解决方案。
不知道现在有没有像POI一样的库。



我怎么觉得 PHP 的这些库比POI好?

我给我女朋友做统计,本来想作个有GUI的,所以就用POI搞,结果实在是不爽,到最后还是放弃了GUI,用PHP搞了命令行脚本
rjzou2006 2008-05-09
robbin 写道
那你起码要处理好两个问题:

1、改个页面就要重新编译一遍C++源代码,你是否能够忍受

2、你是否有足够自信确保程序创建的所有对象都被你手工销毁掉了,否则你会有无穷无尽的烦恼。




对于高人的话,我也说两句

引用
1、改个页面就要重新编译一遍C++源代码,你是否能够忍受

asp.net 不要? java不要?

引用
2、你是否有足够自信确保程序创建的所有对象都被你手工销毁掉了,否则你会有无穷无尽的烦恼。



其实销毁不一定全要用手工啊。
林杰杰 2008-05-09
zhouky4665 写道
我一直在想有没有高手写个这样的编译器,能把java代码编译成c++的目标码,抛开jvm,保留java的简洁、简单、类库多的特性,带来效率质的飞跃?


抛开jvm的java还能叫java吗?
java的卖点之一就是一次编译,到处运行啊。。。
rubynroll 2008-05-09
neora 写道
Java就是功能全,可以说上得厅堂下得厨房,没法把这个情人抛弃掉。能做Web能做企业应用能做SocketServer能做Desktop Client能做Mobile Client。除了realtime,几乎都能接受java ...


Java也有realtime扩展的,当年做毕业设计的时候差点就选这个课题了,呵呵~

Java确实在每个领域都插一手,但很多领域都没有做到极致,半途而费。例如J2ME,搞了这么多年,还是不像样,可惜了...
JAVA_ED 2008-05-08
pi1ot 写道
JAVA_ED 写道
现在C++的B/S程序都是历史遗留项目 好像EBAY以前就是C++的
如果你是从新开发 不建议用CPP 当然如果你特别爱好 另当别论


真正大数据量高访问量的BS项目的服务端非C/C++的很少吧,据我了解。

少不少我不是很清楚 只说针对楼主 从头来的话不建议用C去写
pi1ot 2008-05-08
JAVA_ED 写道
现在C++的B/S程序都是历史遗留项目 好像EBAY以前就是C++的
如果你是从新开发 不建议用CPP 当然如果你特别爱好 另当别论


真正大数据量高访问量的BS项目的服务端非C/C++的很少吧,据我了解。
JAVA_ED 2008-05-08
现在C++的B/S程序都是历史遗留项目 好像EBAY以前就是C++的
如果你是从新开发 不建议用CPP 当然如果你特别爱好 另当别论
pi1ot 2008-05-08
zhouky4665 写道
我一直在想有没有高手写个这样的编译器,能把java代码编译成c++的目标码,抛开jvm,保留java的简洁、简单、类库多的特性,带来效率质的飞跃?


google "gnu gcj"
zhouky4665 2008-05-08
我一直在想有没有高手写个这样的编译器,能把java代码编译成c++的目标码,抛开jvm,保留java的简洁、简单、类库多的特性,带来效率质的飞跃?
pi1ot 2008-05-08
neora 写道
robbin 写道
那你起码要处理好两个问题:

1、改个页面就要重新编译一遍C++源代码,你是否能够忍受

2、你是否有足够自信确保程序创建的所有对象都被你手工销毁掉了,否则你会有无穷无尽的烦恼。


7年前我一直固执的用ANSI C写CGI。很享受那种执行速度。但开发效率实在太低了。5年前改成PHP,很享受那种轻松随便,但表达复杂的业务逻辑是在太麻烦了。4年前改成Java,很享受强类型和各种框架带来的思维禁锢,但执行效率实在垃圾了。现在我老了,ruby没力气学了......


#include "weblib.h"
int main() {
  CGI c;
  std::string s = c["param"];
  HTML t;
  t.load( "templet.html" );
  t.set( "var", s );
  t.print();
}


效率很低吗?当然编译过程是有点烦人,c++模板库到处都是,改个页面都要重新编译有点夸张了吧
mimo 2008-05-08
neora 写道
robbin 写道
那你起码要处理好两个问题:

1、改个页面就要重新编译一遍C++源代码,你是否能够忍受

2、你是否有足够自信确保程序创建的所有对象都被你手工销毁掉了,否则你会有无穷无尽的烦恼。


7年前我一直固执的用ANSI C写CGI。很享受那种执行速度。但开发效率实在太低了。5年前改成PHP,很享受那种轻松随便,但表达复杂的业务逻辑是在太麻烦了。4年前改成Java,很享受强类型和各种框架带来的思维禁锢,但执行效率实在垃圾了。现在我老了,ruby没力气学了......




执行效率很垃圾吗?
mathgl 2008-05-08
excel 最好用.net技术
pi1ot 2008-05-08
neora 写道
Java就是功能全,可以说上得厅堂下得厨房,没法把这个情人抛弃掉。能做Web能做企业应用能做SocketServer能做Desktop Client能做Mobile Client。除了realtime,几乎都能接受java。虽然在各个方面都不是最好的,但都在“可用”级别以上。
C当然也能做到这些,但要知道,用了Java,你几乎不需要自己到数百个代码文件里到处找哪里忘记free()阿!


现在哪里还有自己人肉malloc/free,new/delete的写c++的实际项目的了?大堆大堆的各式各样的任君选购的LIB摆在那里。我自己一个项目两三百个cpp文件,grep下来总共malloc/new不超过10次,还都在底层公用函数库中。
neora 2008-05-07
Java就是功能全,可以说上得厅堂下得厨房,没法把这个情人抛弃掉。能做Web能做企业应用能做SocketServer能做Desktop Client能做Mobile Client。除了realtime,几乎都能接受java。虽然在各个方面都不是最好的,但都在“可用”级别以上。
C当然也能做到这些,但要知道,用了Java,你几乎不需要自己到数百个代码文件里到处找哪里忘记free()阿!
luolonghao 2008-05-07
neora 写道
ozzzzzz 写道
说实在的,我觉得任何编译语言,做web应用都不会很爽。即便是java这个东西,也是如此。比较起来还是动态的脚本语言比较现实和有效率一些,特别是在硬件便宜的今天。

写个论坛当然PHP比较爽拉。写Web ERP用PHP,到后来就烦死了。


PHP写企业应用确实找死,呵呵。
就说读写EXCEL、打印PDF文件,以前没有很好的解决方案。
不知道现在有没有像POI一样的库。
robbin 2008-05-07
业务逻辑其实用ruby写是最爽的,特别是自己定制一下DSL,简直不是编程,而是在写业务逻辑的SPEC描述。
ozzzzzz 2008-05-07
neora 写道
ozzzzzz 写道
说实在的,我觉得任何编译语言,做web应用都不会很爽。即便是java这个东西,也是如此。比较起来还是动态的脚本语言比较现实和有效率一些,特别是在硬件便宜的今天。

写个论坛当然PHP比较爽拉。写Web ERP用PHP,到后来就烦死了。

我见过讲业务逻辑分层,用其他脚本完成,而仅仅是显示用php的。
要是业务也用php,确实是会有想死的感觉。嘿嘿
neora 2008-05-07
ozzzzzz 写道
说实在的,我觉得任何编译语言,做web应用都不会很爽。即便是java这个东西,也是如此。比较起来还是动态的脚本语言比较现实和有效率一些,特别是在硬件便宜的今天。

写个论坛当然PHP比较爽拉。写Web ERP用PHP,到后来就烦死了。
发表评论

提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则

您还没有登录,请登录后发表评论

danielking
搜索本博客
博客分类
最近加入圈子
最新评论