今年春节用C++七天谈下,三十天完成,结果小赚了30万的小项目。我还真有用C++赚外快的“恶习”。
先回答问题:建议可以(试试)用C++写WEB项目。
插个寻找兴趣团:看此问题的应该主要是C++程序员吧! 有兴趣玩转C++搭高性能WEB应用的同学,请私信我并留下微信号。一起学一起玩吧。
~7/14 补充:
评论中许多人还停留在C++写东西,特别是WEB后端,需要大量重新发明轮子的思维。。。确实,当初WEB程序最早就是CGI行式,就是用C或C++,然后漂亮的轮子出来了,比如PHP。但现在是什么情况呢?补一段让大家可以轻松理解:
# 前端 :html5 ,css ,js(jquery) ,ajax,前端模板技术。
# 后端框架:nginx(web接入和负载均衡) , redis (全局缓存,跨主机session管理) ,MySQL 和MySQL官方C++SDK。 CPPCMS(只用了它作为高性能的jsonRPC服务端,有许多代替品,restful 风格 API,封装了所有线程,异步,html请求响应的参数自动绑定……)。
# 无聊而喷喷不平的C++程序员: 妈的,不让我处理并发,不让我处理异步,不让我写内存池,不让我写数据库连接池,不让我自个儿写网络连接池,不让我接触linux下的socket网络函数,甚至不让我写json报文的解析(信不信我就是有志气和能力分分钟写一个干死fastjson的新库??),啊,连个带终端彩色输出日志库也不让我写?我还是个C++程序员吗?我倒要看看谁敢拦着我从零开始,以C为主,杂夹一点汇编,写一个MQ?!啊,这位是zeroMQ,您好,你请坐。老板,快TM过来告诉你卖这个干果要放在哪个虚拟货架上,要不要支持多地仓库出货?要不要做拆单?购物车要不支持黄金奢华版和东南亚草裙版皮肤自动切换?老板:别急,这里有个很复杂的设计,你要满足我一键将所有菲律宾水果全部换成广西的功能!你用这什么C草草开发行吗?不行还是换我有听说过的那两门语言吧?
# 一个月以后……系统上线,关键几个性能提升了30倍,肉眼可识别。老板痛快给钱,C++程序员在羞辱中接过现金,数钱数到手抽筋(实事,这老板就是给我现金)。一边数一边哭泣:一个轮子都不让我发明……我以后在C++朋友圈里还要不要做人啊……
-~~~以下正文~~~~
某传统销售企业高举互联网旗帜转型。要在节后一些城市搞现场活动。系统是去年8月找不靠谱小公司做的,PHP,报价15万(约)。
功能很乱,例:不同商城买东西要用不同购物车。
性能有问题,服务器就一台(因为也没做负载分摊的考虑),开发商自己也没信心能支撑五千人大会。吱吱唔唔。
有安全问题,严重逻辑漏洞,被(猜测,内部出去的人)攻击过,客户说一下午和一晚上损失了快二十万,急关停。
七拐八拐关系,找到我救急。大会日期临近了。
但我是个1997年入行的传统程序员。硬没写过像样的WEB/BS 应用。
工作上写过工控程序,写过类office这么传统的桌面软件,也搞过C和j2me嵌入式开发,用C#写过wince程序。
外快方面用delphi写第一个程序就直接用来赚外快,医药标准多媒体宣传光盘,在2000那年,七天赚了5000元,大概是04年还用C++ builder 写过擦边球软件一个月赚了20K。
WEB网站?后台java 或PHP程序,确实没正经写过什么。这二十年。
没敢答应,先同意帮走读下PHP代码找找有什么问题可指导。看了七天。这一看肯定就犯了程序员的臭毛病,想重写它。
第一步应对大会,在当前PHP代码上改掉或绕过坏事的一些问题。成功后,第二步双方开始谈如何全部重写。我报价一百万。我想找个朋友一起,花一个月重写这商城。与客户公司的其他股东当面聊了聊。我拿出报价明细表。客户说另有一家十来人开发团队报价才十二万云云,又从美国请来一技术总监说重写的关键是什么什么的。。。
谈判很快结束。开始正式谈如何推倒……重来。对方本不懂IT的负责人,这小半年来“久病成医”,很专业地说:重写可以,但不能再用PHP,必须用JAVA。
严肃地指正了他对PHP的误解,告诉他世上有许多著名的大型网站都是用这门语言建设了迪拜城。他说,这个比喻应该是罗马城啊。一个这么聪明的老板在文学修辞也还是不够与时俱进,所以许多C++客坚守 C++不能写WEB后端的观点也不算离奇。
我会HTML5和JS(主要是Jquery)。我会C++。我虽然没动手过但我一直对用C++也可以(轻松)写很棒的web 应用有着不可置信的盲目乐观。
因为我根本就没打算用C++写出一行用于吐出HTML的代码。我比较不舒服带某特定含义的字母P结束的WEB 编程语言背后的软件架构和思路,比如 PHP ASP JSP ,就像身为C++ 程序员,我从MFC 第一个版本就开始倒胃口它的结构和设计思路而坚持宁可用原生的WIN SDK开发OFFICE套件。(不是微软那个,但微软那个也没有用MFC嘛)。我比较爱在品味方面以丢失工作的代价装装逼。
这次是赚外快,我应该有自己做决定的权利嘛。所以在起草合同时写上了:“系统后台主要程序,应采用JAVA等非解释型编程语言进行开发”。这个等字很重要。
上开源中国(oschina),安装一个估计已经没人维护的CPPCMS框架。这框架的名字是骗人的,和CMS没有什么关系。有不少问题,但拿它作为json-rpc的服务端,简单,结实,高效(开发及运行),虽然它不支持JSON-RPC的2.0标准,但一个远程调用的需要可以满足就好。
安装ngnix 。把所有原来的PHP网页,全部改造为静态网页。纯 html5 加 js 发起 ajax 从c++ (cppcms)写的后台拉数据(json 格式),然后用jquery-templates 组织数据基于模板的展现。(这个模板采用html的 “data-”属性,所以没有破坏纯HTML这个特点)。
静态页面,JS脚本文件,CSS文件,图片,这些都交给俄罗斯人的ngnix,我从大致知道系统功能及系统用户不到二十万的背景起,就相信一个20兆带宽ngnix可以挡住一切。这个判断在后来实际运行时,被打脸了,因为可爱的美工做商品图片都很高保真。一边催她们把图压一下,一边让老板花点小钱买了七牛云服务。
@许式伟 。七牛很好。因为你欠费好久,服务也继续可用,他们也不太爱催你交钱,另一种判断是小钱容易忘了催 。反正我觉得许老板应该还是很技术型的,像我,不太爱搭理钱。
唯一不爽的是,腾讯的微信SDK包(用于获得用户信息,支付等等功能)好像,反正我没找到C++版本。我看了一眼PHP版本,原来是用libcurl ,莞尔一乐:小样你不是纯C的吗?别以为套上世界上最好的马甲,我就认不出你来 。于是花了一下午搞了个微信SDK的C++版本。
web 商城技术结构:
一,纯HTML + JS(jquery) + CSS 负责页面布局 。 使用ajax 请求数据,用jquery-templates 动态展现数据。
二,网站后台 部署一个nginx,一负责吐出所有静态文件,图片数据套了层七牛缓存,二负责以反向代理的方式 ,向C++写的REST 服务 要数据。
三,C++写的REST 服务。独立进程,可在多台服务器上部署多个。让nginx负责负载均衡。
四,上redis作为大量数据的缓存。和小伙伴花了两个小时,挑出一个比较爽的c++封装。忘了叫什么了----好的工具就是这样,让我们只是用它,忘记它的存在。
五,MySQL 。用官方(Oracle)的C++ 客户端SDK,mysqlpp。
六,PHP没全丢。但把它当Python使用(php client) ,写个可以独立运行的程序,在后台读数据做一些非实时任务处理。(比如计算一下这位今天一口气买了不少东西的顾客,系统该送多少个积分给他。。)
后记:程序上线一运行就到五月底,哇,居然挂掉了。商城热线电话接不停,客服很生气。我也不急。于是:七,用linux shell 写个守护程序,20秒检查一下,一看进程消失就重启它。周末我走读了下代码。循环比较std::map的每个元素,然后通达iterator 删除(erase)时,好像搞错。。。。NND ,好像是C++涉及迭代器的很经典的面试题吧?你能猜到了吧!
用着STL,用着第三方库接收http请求,再用官方的库读读写写数据库,再处理下吐出json 数据,(转换json数据也是第③方的库)。对了,我们也用了不少C++11舒服的特性。没有手工分配和维护的内存,这门传说中恐怖之致的语言其实乖巧得像一头奶牛依靠在ngnix之后的草地上吃的是草吐的是奶。除了结构上加了redis作缓存,完全没去想什么特别的优化,但实测性能(处理并发能力)比原来的版本飚出快三十倍。
老板表示很开心。当初合同在一百万杀价后,有六十多万。但因为双方合作太开心。老板说成立一家新公司负责IT。我和一起开发的小伙伴变成股东,合同上未付的30多万折成股本金-——我们很开心了一阵呀,但也就一阵。很快发现:没外快赚了
:(。
补个开发环境:ubuntu ,QtCreator(CMake)
看此问题的应该主要是C++程序员吧! 有兴趣玩转C++搭高性能WEB应用的同学,请私信我并留下微信号。一起玩(我说的是外快)吧。