wuxinli1025
V2EX  ›  C

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

  •  
  •   wuxinli1025 · Sep 19, 2016 · 5296 views
    This topic created in 3699 days ago, the information mentioned may be changed or developed.

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

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

    谢谢。

    Supplement 1  ·  Sep 19, 2016
    澄清:
    1.用户登录后要发贴, 没问题 cgi 输出发帖页面的,这个时候后端(输出页面的这个 cgi)还在运行哦
    2.可以 Java , 但是不倾向
    3.要是没个功能都重新运行一下 cgi , 我要怎么做返回页面?
    Supplement 2  ·  Sep 20, 2016
    如果前端用 HTML+jquery+php , 有没有好的办法让 c++了解系统的 state(比如说记住当前的用户)
    44 replies  •  2016-09-21 10:03:05 +08:00
    kokutou
    kokutou
    Sep 19, 2016 via Android
    1
    好像有人做了个 c++的网站。。。好快好快。。。
    qinxi
    qinxi
    Sep 19, 2016
    2
    这么简单的需求为啥不换一个更方便的语言? 比如 "PHP 是最好的语言"
    saberlion
    saberlion
    Sep 19, 2016
    3
    想法不奇怪。。
    pi1ot
    pi1ot
    Sep 19, 2016
    4
    为什么“后端要是一个完整的程序, 不能每个功能写一个 cgi ”?
    andyhuzhill
    andyhuzhill
    Sep 19, 2016
    5
    CppCMS  怎么样?
    azh7138m
    azh7138m
    Sep 19, 2016
    6
    然后就写了个解析器,结果越改越像 php....
    wuxinli1025
    wuxinli1025
    OP
    Sep 19, 2016
    7
    @qinxi 要求啊 必须 C++/Java
    wuxinli1025
    wuxinli1025
    OP
    Sep 19, 2016
    8
    @pi1ot 要求, 要开发整体系统
    wuxinli1025
    wuxinli1025
    OP
    Sep 19, 2016
    9
    @kokutou 可否给个链接, 谢谢
    fatedier
    fatedier
    Sep 19, 2016
    10
    教学练习?
    wuxinli1025
    wuxinli1025
    OP
    Sep 19, 2016
    11
    @fatedier 是的
    halfcoder
    halfcoder
    Sep 19, 2016
    12
    我看了好几遍还是没有理清楚你到底是要在什么环境下实现这些功能?
    既然你提到 cgi ,那么我假定你是用 apache 等作为 http 服务器, c++只是写的后端逻辑。那么:
    不能每个功能写个 cgi ?单个 cgi 检查 querystring 再调用具体函数执行,就相当于自己写个 router
    “用户登录后要发贴, 没问题 cgi 输出发帖页面的,这个时候后端还在运行哦”—— apache 难道不是一直在运行的么?“后端”到底是个啥?
    wuxinli1025
    wuxinli1025
    OP
    Sep 19, 2016
    13
    apache 是一直在运行。不允许每个功能写个 cgi 。 用户登录后要发贴, 没问题 cgi 输出发帖页面的,这个时候后端(输出页面的这个 cgi)还在运行哦
    xylophone21
    xylophone21
    Sep 19, 2016
    14
    多进程
    fatedier
    fatedier
    Sep 19, 2016
    15
    @wuxinli1025 https://github.com/ipkn/crow 还是有一些类似这样的 web 框架,没必要用 cgi 吧。而且 c++ 写 web 感觉太受罪,还是用 Java 吧。
    giuem
    giuem
    Sep 19, 2016
    16
    @wuxinli1025 https://github.com/typcn/LeanClub 这有一个 C++ 写的论坛
    soli
    soli
    Sep 19, 2016
    17
    楼主想多了。其实没那么复杂。

    把 HTTP 协议和 Fast-CGI 协议吃个半透就没问题了。
    bramblex
    bramblex
    Sep 19, 2016
    18
    1. 从问题描述来看,楼主你是不是根本没有任何 web 开发开发的相关经验和知识?
    2. 如果一定要 C++ 楼上的 crow 还不错,至少比 java 的那套东西方便多了
    3. 关于登陆问题,自行 google 一下 cookies 。反正你做出来的东西不是实用的,直接把登陆信息明文写进 cookies 里面就行了。
    4. 大胆猜测一下,这是楼主计算机网络或者是数据库的大作业吧?
    wuxinli1025
    wuxinli1025
    OP
    Sep 19, 2016
    19
    @bramblex 哈哈哈哈 系统开发的大作业
    wuxinli1025
    wuxinli1025
    OP
    Sep 19, 2016
    20
    @bramblex 竟然忘了可以用 cookies , 哈哈哈哈
    bramblex
    bramblex
    Sep 19, 2016
    21
    @wuxinli1025

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

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

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

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

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

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

    http 是本来就是无状态链接,企图用来维持当前的 state 是不科学的。除了一些高实时的应用场景,否则一般不会维持状态。你把你带状态的部分扔前端去就好了,把后端就当成一个存取数据的地方就行了。
    wuxinli1025
    wuxinli1025
    OP
    Sep 19, 2016
    30
    @halfcoder 貌似所错了, 输出完页面后 cgi 应该终止了的。 但是还是觉得整个实现方法奇奇怪怪的。
    wuxinli1025
    wuxinli1025
    OP
    Sep 19, 2016
    31
    @halfcoder 可以终止也可以不终止嘛, 看情况啦
    wind3110991
    wind3110991
    Sep 19, 2016
    32
    我觉得。。。过度纠结于一门语言不适用的方向,还不如花心思提高其他地方,比如如何优化 DB 查询和服务器性能、优化数据缓存、优化系统架构等等, C++的优势本身在于能够从底层全局地解决问题,并且稳定地支撑系统运行。用 C++做网络层和传输层的工作,应用层结合一个 web app 框架不挺好的吗,封装传输数据,并且保证请求不会有问题,干嘛那么折腾 = =
    fluyy
    fluyy
    Sep 20, 2016
    33
    看你的描述,你要写一个 HTTP 服务器。。。或者用 c++为现有的一些服务器开发写扩展。
    如果是老师的大作业,要自己开发, 那么简单点起一个守护进程监听 80 端口,有数据过来,就按照 http 的格式去解析, 根据解析出来的 url 去路由到对应的 class 上去。 如果是大作业,什么多线程多进程 select 模型都用考虑了。。。。
    如果不是大作业,没有成熟的框架久不要用 c++写了吧。 python 多好用。
    SlipStupig
    SlipStupig
    Sep 20, 2016
    34
    @veelog 强烈同意用 nginx+lua 扩展马上做完作业
    pi1ot
    pi1ot
    Sep 20, 2016
    35
    @wuxinli1025 完全不理解的你说的所谓整体系统是个什么意思,什么定义,什么需求,麻烦换成行内术语描述。
    wuxinli1025
    wuxinli1025
    OP
    Sep 20, 2016 via iPhone
    36
    @pi1ot 后端要是单个可执行文件
    hcymk2
    hcymk2
    Sep 20, 2016
    37
    @wuxinli1025
    单个可执行文件 可以用 go
    qinxi
    qinxi
    Sep 20, 2016
    38
    @wuxinli1025 可以 java 啊 ..那也简单啊...spring boot 可以 以 jar 的方式运行服务
    halfcoder
    halfcoder
    Sep 20, 2016
    39
    @wuxinli1025 我觉得 cgi 处理完请求输出页面 /结果之后应该是要退出的, cgi 是一个 fork-execute 模型,不退出挺奇怪的。
    注意 HTTP 的设计是无状态的,即使保持 session 也是服务端自己的机制保证一个访问来源在一段时间的状态数据,不是 HTTP 的设计。所以你在充分理解 HTTP 协议机制和 cgi 执行流程之后再来考虑这个怎么设计会比较清晰一点。
    pi1ot
    pi1ot
    Sep 20, 2016
    40
    @wuxinli1025 很奇怪的需求,不过你自己写一个完整的 http server 也可以满足
    zxiso
    zxiso
    Sep 20, 2016 via Android
    41
    cpprestsdk 。不过这个东西文档有点少。。
    qichunren
    qichunren
    Sep 20, 2016
    42
    我使用 mongoose 这个库(就一个 mongoose.h 和 mongoose.c 文件)做 WEB 服务,感觉还不错。
    skydiver
    skydiver
    Sep 20, 2016
    43
    用 libuv 和 http_parser 写个简单的 http 服务很容易的,性能也很高。前面 nginx 反向代理一下就行了
    huage
    huage
    Sep 21, 2016
    44
    一个语言或者工具有它适合的用途,不要违背这些东西
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2928 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 60ms · UTC 11:55 · PVG 19:55 · LAX 03:55 · JFK 06:55
    ♥ Do have faith in what you're doing.