C++做后端网站开发问题

2016-09-19 17:58:48 +08:00
 wuxinli1025

前端选择没有限制, 但是用户输入检测, 插入到数据库, 各种涉及计算的任务必须有 C++后端完成。 而且, 后端要是一个完整的程序, 不能每个功能写一个 cgi , 比如说用户注册 /登陆 /发帖等功能需是这个完整程序的不同 function 。

目前的想法是: 前端 html/jsvascript 然后吧用户输入的数据 cgi 提交到 C++, 然后由 C++检测后提交到数据库。 但是网站有很多功能, 用户登录后要发贴, 没问题 cgi 输出发帖页面的,这个时候后端还在运行哦, 但点击提交后难道要再运行这个后端去插到数据库里?!!! 这种想法简直不能再奇怪了好吗。 感觉 cgi 根本不是为建设全站设计的。 有没有其他的办法, 试过了 Wt , 太难用没教程文档少。 还是学生, 求大神指点一二。

谢谢。

3859 次点击
所在节点    C
44 条回复
bramblex
2016-09-19 20:52:30 +08:00
@wuxinli1025

反正你准备前后端分离嘛,那干脆模板引擎都不要了,前后端直接 JSON 交互。然后前端完全做成单页应用就好了。
wuxinli1025
2016-09-19 21:12:24 +08:00
@bramblex 我也是这样想的, 人懒嘛。 获取数据用 JSON 或者 PHP 都比较简单,提交数据用 cgi 。
但之前设计了那么多各种 diagrams , 整体上来看各个功能都是属于整体系统的一部分, 按道理讲应该用很多 class 和成员函数。 后端应该对当前系统的 state 有所了解。 如果做成 JSON 的话整个系统看起来岂不是很垃圾?
可老师又说对前端没有要求, 但又说要用 entity class/control class/boundary class , 那意思是不是 entity class 要放后端? 如果前端没要求可以 html/js 的话, entity class 放后端有何用?用来占行数的吗? 还是我理解错了, 比如把当前用户存在 cookies 里也算用到 entity class 了?
大神你觉得呢?
veelog
2016-09-19 21:15:55 +08:00
nginx 扩展 c++
halfcoder
2016-09-19 21:54:16 +08:00
@wuxinli1025
> 用户登录后要发贴, 没问题 cgi 输出发帖页面的,这个时候后端(输出页面的这个 cgi)还在运行哦

你确定?
jimzhong
2016-09-19 22:14:41 +08:00
如果你只想得到一个可执行文件,那么要么在这个文件中实现一个 HTTP 服务器,要么像 php 一样把路径作为 GET 的参数传给你的程序,在程序里面写一个函数判断要调用哪个函数。

还有一个方法是你给这个文件建立好多软连接,然后通过 argv[0]判断调用它的名字, busybox 是这么做的。
建议使用 session 保存状态。

建议 lz 阅读一下 CGI 的规范,我记得 CGI 输出东西后是要 exit 的。 HTTP 服务器是肯定在一直运行的。

如果前后端分离,建议使用 JSON ,前端可以做成 SPA ,而不是让后端输出一个 html 出来。
GentleSadness
2016-09-19 22:19:28 +08:00
@kokutou 不是说瓶颈在网络速度吗
wizardoz
2016-09-19 22:32:35 +08:00
有很多办法可以解决你说的问题,比方说 CGI 程序和常驻进程通过消息队列通信或者 CGI 程序通过远程过程调用和常驻进程通信。

但是楼主既然问得出这样的问题,为什么一定要使用 C++来实现?
wizardoz
2016-09-19 22:36:12 +08:00
不好意思,没看到 LZ 说的必须选择 C++和 Java ,忽略我刚刚说的。
bramblex
2016-09-19 22:44:09 +08:00
@wuxinli1025

http 是本来就是无状态链接,企图用来维持当前的 state 是不科学的。除了一些高实时的应用场景,否则一般不会维持状态。你把你带状态的部分扔前端去就好了,把后端就当成一个存取数据的地方就行了。
wuxinli1025
2016-09-19 23:02:44 +08:00
@halfcoder 貌似所错了, 输出完页面后 cgi 应该终止了的。 但是还是觉得整个实现方法奇奇怪怪的。
wuxinli1025
2016-09-19 23:04:02 +08:00
@halfcoder 可以终止也可以不终止嘛, 看情况啦
wind3110991
2016-09-19 23:08:38 +08:00
我觉得。。。过度纠结于一门语言不适用的方向,还不如花心思提高其他地方,比如如何优化 DB 查询和服务器性能、优化数据缓存、优化系统架构等等, C++的优势本身在于能够从底层全局地解决问题,并且稳定地支撑系统运行。用 C++做网络层和传输层的工作,应用层结合一个 web app 框架不挺好的吗,封装传输数据,并且保证请求不会有问题,干嘛那么折腾 = =
fluyy
2016-09-20 00:19:00 +08:00
看你的描述,你要写一个 HTTP 服务器。。。或者用 c++为现有的一些服务器开发写扩展。
如果是老师的大作业,要自己开发, 那么简单点起一个守护进程监听 80 端口,有数据过来,就按照 http 的格式去解析, 根据解析出来的 url 去路由到对应的 class 上去。 如果是大作业,什么多线程多进程 select 模型都用考虑了。。。。
如果不是大作业,没有成熟的框架久不要用 c++写了吧。 python 多好用。
SlipStupig
2016-09-20 00:23:48 +08:00
@veelog 强烈同意用 nginx+lua 扩展马上做完作业
pi1ot
2016-09-20 09:01:08 +08:00
@wuxinli1025 完全不理解的你说的所谓整体系统是个什么意思,什么定义,什么需求,麻烦换成行内术语描述。
wuxinli1025
2016-09-20 09:12:12 +08:00
@pi1ot 后端要是单个可执行文件
hcymk2
2016-09-20 09:24:47 +08:00
@wuxinli1025
单个可执行文件 可以用 go
qinxi
2016-09-20 09:29:45 +08:00
@wuxinli1025 可以 java 啊 ..那也简单啊...spring boot 可以 以 jar 的方式运行服务
halfcoder
2016-09-20 09:48:39 +08:00
@wuxinli1025 我觉得 cgi 处理完请求输出页面 /结果之后应该是要退出的, cgi 是一个 fork-execute 模型,不退出挺奇怪的。
注意 HTTP 的设计是无状态的,即使保持 session 也是服务端自己的机制保证一个访问来源在一段时间的状态数据,不是 HTTP 的设计。所以你在充分理解 HTTP 协议机制和 cgi 执行流程之后再来考虑这个怎么设计会比较清晰一点。
pi1ot
2016-09-20 10:33:48 +08:00
@wuxinli1025 很奇怪的需求,不过你自己写一个完整的 http server 也可以满足

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/307319

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX