TreeFrog Web Framework -- An C++ Web Framework - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
skywinger
V2EX    程序员

TreeFrog Web Framework -- An C++ Web Framework

  skywinger 2012-08-23 17:37:18 +08:00 5972 次点击
这是一个创建于 4799 天前的主题,其中的信息可能已经有所发展或是发生改变。
http://www.treefrogframework.org/

最近看到一个新的fullstack的C++ Web Framework TreeFrog
和ROR非常的相似,也是可以用C++来快速开发Web应用,不过是鬼子的。
24 条回复    1970-01-01 08:00:00 +08:00
reorx
    1
reorx  
   2012-08-23 18:10:53 +08:00
哈哈,楼主最后一句我喜欢。
skywinger
    2
skywinger  
OP
   2012-08-26 15:21:35 +08:00
呵呵,看来大家对用C、C++来做web都不感冒。
limu
    3
limu  
   2012-08-26 15:40:04 +08:00
@skywinger web开发=字符串拼接. 就C/C++的的字符串功能, web开发就是找虐.
ljbha007
    4
ljbha007  
   2012-08-26 16:53:17 +08:00
@limu c++不是支持字符串拼接么
limu
    5
limu  
   2012-08-26 18:30:52 +08:00
@ljbha007 要说支持自然是支持,就连c也可以concat。 但是好用吗,易用吗,有正则表达式吗,要手动管理内存吗,有split函数吗,unicode好搞吗,这都是问题
zealot
    6
zealot  
   2012-08-26 19:11:21 +08:00
@limu 有一两年技术积累的C++团队,如果没有类似动态语言一样的正则表达式/split函数/编码处理 封装,那就该反思了。
最大缺陷还在手动内存管理,不过简单业务逻辑(点击统计等中转页面、简单吐出一个iframe页面等)&追求高性能的场景下,这个缺陷就是优势了(自定义内存管理带来的性能提升)。

不过如果需要用到模版引擎、ORM,那么这个复杂性估计已经不适合用C++了。
个人认为,C++应用到web前段引擎开发还是比较适合处理简单的业务逻辑,框架可以是基于Nginx模块机制,或libevent的http库,封装出来一个易于使用的东西,提供uri参数、header、cookie、postdata的获取与Response生成的便利接口。简化开发逻辑。
yetone
    7
yetone  
   2012-08-26 19:18:31 +08:00
@reorx 喜欢日本的产品
limu
    8
limu  
   2012-08-26 20:20:00 +08:00
@zealot 赞同。
用nginx或boost.asio写异步的代码,由于没有closure,资源的所有权问题很棘手,就算java,也有gc,这个问题还不是那么突出,经过多次异步回调,业务逻辑分散在各处时,c++的资源(内存)谁来分配,谁来释放,都很考量设计能力(智能指针也不能完全解决)。
时间花在这里头就一大半,就不能专注于业务逻辑了,开发效率低,而且门槛太高了。
skywinger
    9
skywinger  
OP
   2012-08-26 21:41:07 +08:00
@limu @zealot 不过就执行效率及大并发量访问而言,c++ web framework 还是优势明显的。
字符串拼接 c++不成问题,也很简单,stl库中有多种常用的数据结构(泛型的)和算法;
也能够使使用者快速应用。
fangzhzh
    10
fangzhzh  
   2012-08-26 22:16:59 +08:00
@limu
@skywinger
@zealot
我们公司在boost::asio和muduo的基础上开发了一套蛮强悍的网络库,前几天我封了一下uri的处理,也是一个web framework了。执行效率和并发都很强悍。

我本来想自己做点东西出来,玩一玩。
但是发现他最大的问题,而你们说的都不在点子上。

字符串拼接,资源释放,正则表达都不是什么问题,closure没什么,有了boost,c++0X就可以玩一玩。

最大的问题是投入。
1 服务器的投入,php,python,ruby的空间,便宜的一抓一大把,程序移植也没什么大问题。
但是C++程序开发环境和运行环境的一致性就很头痛。 linux内核版本,glibc版本,boost版本,一个不同,他就运行不起来。 方案就是买vps,直接自己装。vps对于想要玩一玩的就相对很奢侈了。对一些前期比较拮据的小团队也很奢侈。
2 员工。 不是为了引起口水战。相同段位的C++程序员要比python,php,ruby的程序员贵。相对投入要大。
3 开发周期。 相对来说,C++相对python,ruby,php来说开发的低效才是最重要的。相同的业务逻辑用python这种动态语言开发很快,库很多,语法优雅;C++各种变量,各种类型,各种引用,指针,变量,库。头文件包含问题,编译时间时间爆长。开发起来很麻烦,产出不高。
zealot
    11
zealot  
   2012-08-27 09:55:03 +08:00
@fangzhzh
“1. 服务器的投入,php,python,ruby的空间,便宜的一抓一大把。”
看来我们讨论的不是一个阶段的问题。
起步阶段:需要不断试错,探索,要点就一个字:快!产品快速迭代,不该用C++来写web前端,php/python/ruby更合适。就算是后端也应当Python/Ruby+开源软件来搭建。
成熟阶段:这时候产品成熟了,也开始赚钱了,线上堆上成千上万台服务器,性能优化1%都能带来巨额的经费节省,那么没有人会介意投入点人和时间进去搞搞C++的。而实际上,前期快速的产品迭代必然给后期留下巨大的优化空间,发展没压力时该考虑从性能上榨出利润了。
fangzhzh
    12
fangzhzh  
   2012-08-27 11:34:11 +08:00
@zealot 请参考我说的第三点:)
skywinger
    13
skywinger  
OP
   2012-08-27 13:26:57 +08:00
@zealot @fangzhzh
如果假设有个c++ web framework 具有runtime binding 及动态编译的功能呢?
zealot
    14
zealot  
   2012-08-27 13:31:29 +08:00
@fangzhzh
我说的第二点可以对你的第三点,但业务规模发展到每天千万、甚至过亿的PV时,人力成本占比就没那么大了,当然,依旧不建议复杂的web逻辑用C++实现,可以针对api之类的简单逻辑且调用次数庞大的业务采用C++,这样的话过于复杂且笨重的C++框架也未必合适:
成熟阶段:这时候产品成熟了,也开始赚钱了,线上堆上成千上万台服务器,性能优化1%都能带来巨额的经费节省,那么没有人会介意投入点人和时间进去搞搞C++的。而实际上,前期快速的产品迭代必然给后期留下巨大的优化空间,发展没压力时该考虑从性能上榨出利润了。
forest520
    15
forest520  
   2012-08-27 13:44:04 +08:00
@fangzhzh 说的好。对于第三点,不知道你怎么看java的开发效率?因为对java更熟悉些,play框架看起来还比较易用。
zealot
    16
zealot  
   2012-08-27 13:46:12 +08:00
@skywinger 重点还是在开发效率,小公司刚起步时迭代速度很重要,C++ web framework有runtime binding 及动态编译的功能也无济于事。

使用动态语言,可以马上拥有庞大且成熟的开发库,包括模版引擎、ORM、Auth集成、权限管理、甚至是开源的SNS/电子商务网站等等,这些是C++真正缺乏也没必要拥有的特性。当然如果真在C++里面把这些功能全集成进去时,性能也会大打折扣,选择C++意义就不大。

小公司起步时就一个字:快!

至于性能问题不应该优先考虑C++,而是考虑找些资深的Python/Ruby/PHP工程师。
产品都没定型,业务模式还没想清楚时,就不应该想C++还是Python,而应当考虑下个A/B Testing有什么办法能快点发布,尽早验证想法和方向。
skywinger
    17
skywinger  
OP
   2012-08-27 13:59:59 +08:00
@zealot 如果产品是搞通用搜索引擎呢?而非普通的web应用呢?
zealot
    18
zealot  
   2012-08-27 14:09:15 +08:00
@skywinger 我不知道怎么建议,如果是我的话,会优先选择开源的,比如Sphinx等,毕竟用户需要的是产品,而不是C++/Python之类的东西。
产品演化过程中,有必要的话,可以改进开源工具,既节省了自己从头开始研发的时间成本,也能给社区做出回馈。比如Twitter之前采用Lucene,后来因为实时性的特殊需求而在Lucene之上做改进。
等到有一天开源工具彻底不能满足需求时,也应该有钱、有时间去自行研发定制化的搜索引擎了。
skywinger
    19
skywinger  
OP
   2012-08-27 14:51:29 +08:00
@zealot 明白了,不过google当初搭建搜索引擎时,未必是用的开源产品吧。
shiweifu
    20
shiweifu  
   2012-08-27 15:15:17 +08:00
c++ 都忍了,为啥不上openresty?
fangzhzh
    21
fangzhzh  
   2012-08-27 16:36:24 +08:00   1
@zealot
@skywinger

对,我也觉得c++对于刚起步的初创太笨重. 先用动态语言快速开发,上线.

@forest520 我不是很看好,慢就一个字

evernote就是一个很好(不是很恰当,因为是客户端)的例子: 前期 .net(还是java)忘记了开发. 迅速开发上线,拉了很多用户.
到了后来用户无法忍受evernote的速度,反馈很多, 马上用C++重写了整个程序.速度马上上来后, 用户体验增加不是一点半点.
zealot
    22
zealot  
   2012-08-27 20:28:02 +08:00
@skywinger Google那不一样
好比你现在要去北京可以坐飞机,即使去太空砸点钱也能买到一张商业太空飞船的票。但是去火星的话,就只能自己造飞船了。
xuan_lengyue
    23
xuan_lengyue  
   2012-08-27 22:10:01 +08:00
照这样说,其实Objective-C倒是蛮适合用来做Web Framework的。
bhuztez
    24
bhuztez  
   2012-08-27 22:16:28 +08:00
@skywinger 其实Google当年也是用Python瞎搞的
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1241 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 31ms UTC 23:36 PVG 07:36 LAX 16:36 JFK 19:36
Do have faith in what you're doing.
ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86