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

有人试过用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程序

欢迎拍砖!
分享到:
评论
47 楼 thinkx 2008-06-03  
虽然jsp和asp.net也需要编译,但是C++的编译速度和java是完全不同的。
java和C#都是import机制的,而C++却是include机制的,编译速度不可比的。
46 楼 x.matthew 2008-05-28  
cgi 玩过,不过的确非常麻烦。
45 楼 albertlee 2008-05-27  
danielking 写道

第二点确实是有些麻烦,不过就算不是b/s应用,这些问题一样存在于普通c++程序中


你在心理上给自己设置了一个圈套: 那就是:我必须用C++。

你是先有这样的主观 然后才去考虑面对的问题领域。

如果是满足自己的bt心理,那没有问题,去用就ok了 以实际行动支持自己喜欢的语言。我还拿haskell写fastcgi呢。说道这里,haskell虽然也是编译的,但它同样具有动态的加载,替换模块的功能,而且是跨平台的。不依赖于dll。
44 楼 neora 2008-05-27  
robbin 写道

呵呵,看样子你打算challenger一下我。 那么我来告诉你,Java的页面JSP你修改了以后不需要手工编译。ASP也不需要手工编译,PHP,ruby更加不需要手工编译,只有C/C++需要。

JSP: 轮检目录文件,发现变化,转*.java 再转*.class, 通过容器的ClassLoader注册。
PHP:纯解释,每次访问解释一次。

请教Robbin一下:
ASP:类似JSP方式?
Ruby:啥方式?
43 楼 pi1ot 2008-05-27  
robbin 写道

呵呵,看样子你打算challenger一下我。 那么我来告诉你,Java的页面JSP你修改了以后不需要手工编译。ASP也不需要手工编译,PHP,ruby更加不需要手工编译,只有C/C++需要。



在一个逻辑和呈现足够分离的动作中什么时候才需要重新编译CGI?
我的习惯是随手一顿乱敲,make,先参照着error message修改完一堆笔误再进行下一步...

42 楼 pi1ot 2008-05-27  
robbin 写道

呵呵,看样子你打算challenger一下我。 那么我来告诉你,Java的页面JSP你修改了以后不需要手工编译。ASP也不需要手工编译,PHP,ruby更加不需要手工编译,只有C/C++需要。


在一个逻辑和呈现足够分离的动作中什么时候需要重新编译CGI?
我的习惯是随手一顿乱敲,make,先参照着error message修改修改笔误再进行下一步...
41 楼 robbin 2008-05-27  

呵呵,看样子你打算challenger一下我。 那么我来告诉你,Java的页面JSP你修改了以后不需要手工编译。ASP也不需要手工编译,PHP,ruby更加不需要手工编译,只有C/C++需要。
40 楼 t0uch 2008-05-27  
rjzou2006 写道
robbin 写道
那你起码要处理好两个问题:

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

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




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

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

asp.net 不要? java不要?

asp.net 确实不要


我知道ruby不要
39 楼 yyliuliang 2008-05-27  
robbin 写道
那你起码要处理好两个问题:

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

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




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

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

asp.net 不要? java不要?

asp.net 确实不要
38 楼 guojingxf 2008-05-27  
gfgh
37 楼 rainchen 2008-05-24  
要在HTML里嵌C代码的话,不妨考虑试试这个http://bbs.chinaunix.net/viewthread.php?tid=726664
用类似PHP等的标签语法分隔开HTML标记代码,估计会比较轻松
36 楼 linliangyi2007 2008-05-22  
最早的web就是CGI写的啊~~~~
35 楼 gm8pleasure 2008-05-20  
VC的AtL Server object还是有模版的,同Java的MVC非常类似,好像后缀名是srf,现在Hotmail登录的时候,调用的地址就是srf.
如果使用Windows平台,用VC++2003(?2001)以上就存在这样C++的CGI部件,非常好用。
34 楼 andrewleung 2008-05-15  
QQ秀上面的网页、CGI好像基本都是C/C++
33 楼 xtcn 2008-05-12  
http://freshmeat.net/projects/tntnet/?branch_id=60630&release_id=251890

看看这个项目对你是否有帮助:)
32 楼 rjzou2006 2008-05-09  
robbin 写道
那你起码要处理好两个问题:

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

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




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

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

asp.net 不要? java不要?

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



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


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


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

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


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

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


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

相关推荐

    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语言程序设计,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++编程语言中,处理日期和时间是非常常见的需求。无论是系统管理、日志记录还是其他需要跟踪时间的应用程序,都需要掌握时间的基本表示方法以及如何进行...

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

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

    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...

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

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

    《你必须知道的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