`
danielking
  • 浏览: 16814 次
  • 来自: ...
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

有人试过用c++写b/s程序没有?

阅读更多
我为学校内的几个大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程序

欢迎拍砖!
分享到:
评论
27 楼 JAVA_ED 2008-05-08  
现在C++的B/S程序都是历史遗留项目 好像EBAY以前就是C++的
如果你是从新开发 不建议用CPP 当然如果你特别爱好 另当别论
26 楼 pi1ot 2008-05-08  
zhouky4665 写道
我一直在想有没有高手写个这样的编译器,能把java代码编译成c++的目标码,抛开jvm,保留java的简洁、简单、类库多的特性,带来效率质的飞跃?


google "gnu gcj"
25 楼 zhouky4665 2008-05-08  
我一直在想有没有高手写个这样的编译器,能把java代码编译成c++的目标码,抛开jvm,保留java的简洁、简单、类库多的特性,带来效率质的飞跃?
24 楼 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++模板库到处都是,改个页面都要重新编译有点夸张了吧

23 楼 mimo 2008-05-08  
neora 写道
robbin 写道
那你起码要处理好两个问题:

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

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


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




执行效率很垃圾吗?
22 楼 mathgl 2008-05-08  
excel 最好用.net技术
21 楼 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次,还都在底层公用函数库中。
20 楼 neora 2008-05-07  
Java就是功能全,可以说上得厅堂下得厨房,没法把这个情人抛弃掉。能做Web能做企业应用能做SocketServer能做Desktop Client能做Mobile Client。除了realtime,几乎都能接受java。虽然在各个方面都不是最好的,但都在“可用”级别以上。
C当然也能做到这些,但要知道,用了Java,你几乎不需要自己到数百个代码文件里到处找哪里忘记free()阿!
19 楼 luolonghao 2008-05-07  
neora 写道
ozzzzzz 写道
说实在的,我觉得任何编译语言,做web应用都不会很爽。即便是java这个东西,也是如此。比较起来还是动态的脚本语言比较现实和有效率一些,特别是在硬件便宜的今天。

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


PHP写企业应用确实找死,呵呵。
就说读写EXCEL、打印PDF文件,以前没有很好的解决方案。
不知道现在有没有像POI一样的库。
18 楼 robbin 2008-05-07  
业务逻辑其实用ruby写是最爽的,特别是自己定制一下DSL,简直不是编程,而是在写业务逻辑的SPEC描述。

17 楼 ozzzzzz 2008-05-07  
neora 写道
ozzzzzz 写道
说实在的,我觉得任何编译语言,做web应用都不会很爽。即便是java这个东西,也是如此。比较起来还是动态的脚本语言比较现实和有效率一些,特别是在硬件便宜的今天。

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

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

写个论坛当然PHP比较爽拉。写Web ERP用PHP,到后来就烦死了。
15 楼 ozzzzzz 2008-05-07  
说实在的,我觉得任何编译语言,做web应用都不会很爽。即便是java这个东西,也是如此。比较起来还是动态的脚本语言比较现实和有效率一些,特别是在硬件便宜的今天。
14 楼 neora 2008-05-07  
robbin 写道
neora 写道
robbin 写道
那你起码要处理好两个问题:

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

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


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

ruby的执行效率最垃圾,估计你也看不上。

错~~,呵呵。俺从来没看不上任何语言,包括LOGO语言我都一直挺喜欢的,我儿子也喜欢。对于某种语言,我只是说有些方面喜欢,有些方面不喜欢而已嘛。
比如,我就狂喜欢ActiveRecord,主要是怕被他宠坏了,忍不住抛弃老情人Java。
13 楼 robbin 2008-05-07  
neora 写道
robbin 写道
那你起码要处理好两个问题:

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

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


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

ruby的执行效率最垃圾,估计你也看不上。
12 楼 neora 2008-05-07  
robbin 写道
那你起码要处理好两个问题:

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

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


7年前我一直固执的用ANSI C写CGI。很享受那种执行速度。但开发效率实在太低了。5年前改成PHP,很享受那种轻松随便,但表达复杂的业务逻辑是在太麻烦了。4年前改成Java,很享受强类型和各种框架带来的思维禁锢,但执行效率实在垃圾了。现在我老了,ruby没力气学了......
11 楼 luolonghao 2008-05-07  
mornstar 写道
luolonghao 写道
如果用C++写B/S轻松,就不会有PHP了。我认为PHP是C/C++的B/S程序版。

支持。不过PHP的模样又是借鉴Perl的,所以四不象。


Perl是过渡性的,很多方面想提高开发效率,但没有做到,学习成本也不低。
例如:%aa,@bb这些东西没有必要,干脆全部用地址,一个$符号统统都解决。
hash和array也不用再分了,可能运行效率上损失一些,但入门门槛也降低不少,
大量程序员用Perl,再创Perl的辉煌。呵呵。
我真的希望Perl学习PHP的傻瓜式风格,并希望语言层次提供标准通用库。
CPAN东西乱、文档也不全、模块之间风格不一致,看源代码累。
10 楼 mornstar 2008-05-06  
luolonghao 写道
如果用C++写B/S轻松,就不会有PHP了。我认为PHP是C/C++的B/S程序版。

支持。不过PHP的模样又是借鉴Perl的,所以四不象。
9 楼 collger 2008-05-04  
你可以用一下google的ctemplate,那也是页面生成时很有用的库。
8 楼 luolonghao 2008-05-04  
如果用C++写B/S轻松,就不会有PHP了。我认为PHP是C/C++的B/S程序版。

相关推荐

    C++ 数组 多维数组 -- 二维数组

    最后,让我们来看一个使用数组的示例程序: ```c #include main() { int a[6] = {10,20,30,40,50}; int i; for(i=0; i; i++) { printf("a[%d]=%d\n", i, a[i]); } } ``` 这段代码将数组 `a` 的元素初始化为从 ...

    基于B/S视频传输通信

    在这个项目中,可能使用了VC(Visual C++)作为服务端开发工具,因为VC支持创建高性能的服务器应用程序,并且可以与Windows操作系统紧密集成。 【Socket】是网络编程中的基础组件,它允许应用程序通过网络发送和...

    C++程序设计 谭浩强

    cout没有这个人!"; return cur; } //删除 void Student::Delete(Student* head,int data) { Student *bef,*cur; bef=cur=head; while(cur!=NULL) { if(cur->num==data) break; else {bef=cur;cur=cur-...

    新手学习C++入门资料

    这些关键字能作为函数和变量的标识符在C程序中使用,尽管C++包含了所有的C,但显然没有任何C++编译器能编译这样的C程序。 C程序员可以省略函数原型,而C++不可以,一个不带参数的C函数原型必须把void写出来。而C++...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar

    2.4.4 用N-S 流程图表示算法 29 2.4.5 用伪代码表示算法 30 2.4.6 用计算机语言表示算法 31 2.5 结构化程序设计方法 31 3 数据类型、运算符与表达式 3.1 C语言的数据类型 32 3.2 常量与变量 33 23.2.1 常量和符号...

    c++ 面试题 总结

    15.用C++写个程序,如何判断一个操作系统是16位还是32位的?不能用sizeof()函数 A1: 16位的系统下, int i = 65536; cout ; // 输出0; int i = 65535; cout ; // 输出-1; 32位的系统下, int i = 65536; cout ; ...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar )

    2.4.4 用N-S 流程图表示算法 29 2.4.5 用伪代码表示算法 30 2.4.6 用计算机语言表示算法 31 2.5 结构化程序设计方法 31 3 数据类型、运算符与表达式 3.1 C语言的数据类型 32 3.2 常量与变量 33 23.2.1 常量和符号...

    经典C/C++面试题目大汇总(全附答案).doc

    (3)使用指针作为函数的参数虽然也能达到与使用引用的效果,但是,在被调函数中同样要给形参分配存储单元,且需要重复使用"*指针变量名"的形式进行运算,这很容易产生错误且程序的阅读性较差;另一方面,在主调...

    C++ 时间转换与表示

    ### C++ 时间转换与表示 #### 一、基础概念与数据结构 在C/C++编程语言中,处理日期和时间是非常常见的需求。无论是系统管理、日志记录还是其他需要跟踪时间的应用程序,都需要掌握时间的基本表示方法以及如何进行...

    C++ 二次规划源码 quadprog++.zip

    学习和使用 quadprog++ 需要对 C++ 编程有一定的基础,同时理解二次规划的基本概念和优化算法。通过阅读源码,不仅可以掌握二次规划的求解方法,还可以学习到如何用 C++ 实现复杂的数学算法。对于希望深入研究优化...

    语言程序设计课后习题答案

    由于图形用户界面的应用,程序运行由顺序运行演变为事件驱动,使得软件使用起来越来越方便,但开发起来却越来越困难,对这种软件的功能很难用过程来描述和实现,使用面向过程的方法来开发和维护都将非常困难。...

    NOIP2014普及组初赛试题答案C++.pdf

    考试分为三个部分:单项选择题、问题求解题以及阅读程序写结果题。 #### 单项选择题分析 ##### 1. 以下哪个是面向对象的高级语言? - **答案**:B. C++ - **解析**:在所给的选项中,只有C++是一种面向对象的编程...

    椭圆曲线加密算法程序完整版 VC++

    1. **椭圆曲线**:数学上的一类特殊曲线,用方程y^2 = x^3 + ax + b (mod p)来表示,其中p是素数,a和b是整数。每个点P(x, y)在曲线上,除了无穷远点外,每条曲线都有一个对称点,这就是加法运算的基础。 2. **基点...

    2010年9月全国计算机二级C++机试试题及答案.docx

    (8)一个工作人员可以使用多台计算机,而一台计算机可被多个人使用,则实体工作人员、与实体计算机之间的联系是多对多。 (9)数据库设计中反映用户对数据要求的模式是概念模式。 (10)有三个关系 R、S 和 T,则...

    Visual C++ 2005入门经典--源代码及课后练习答案

    原书名: Ivor Horton's Beginning Visual C++ 2005 原出版社: Wiley 作者: (美)Ivor Horton 译者: 李颂华 康会光 出版社:清华大学出版社 ISBN:9787302142713 上架时间:2007-2-12 出版日期:2007 年1月 开本:...

    C语言FAQ 常见问题列表

    我试过 typedef struct { char *item; NODEPTR next; } *NODEPTR; 但是编译器报了错误信息。难道在C语言中一个结构不能包含指向自己的指针吗? o 2.7 怎样建立和理解非常复杂的声明?例如定义一个包含 N 个指向返回...

    各种c++经典例题,多种编程语言

    【程序1】 题目: 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 【程序2】 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高  于10万元,低于20...

    《你必须知道的495个C语言问题》

    我试过typedef struct{char *item; NODEPTR next;}* NODEPTR; 但是编译器报了错误信息。难道在C语言中结构不能包含指向自己的指针吗? 7  1.15 如何定义一对相互引用的结构? 9 1.16 Struct{ } x1;和typedef ...

Global site tag (gtag.js) - Google Analytics