想问下后台用 C++的话,怎么跟前台交互呢 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Yuan2One
V2EX    C++

想问下后台用 C++的话,怎么跟前台交互呢

  •  1
     
  •   Yuan2One 2022-06-24 11:00:14 +08:00 5499 次点击
    这是一个创建于 1204 天前的主题,其中的信息可能已经有所发展或是发生改变。

    边缘计算原因后台项目必须用 C++做,有没有大佬有这方面经验的,需要跟前端交互,给些技术关键词

    34 条回复    2022-06-26 10:04:53 +08:00
    smoon
        1
    smoon  
       2022-06-24 11:03:21 +08:00
    CGI
    wslzy007
        2
    wslzy007  
       2022-06-24 11:04:25 +08:00
    socket || database || queue || cache...
    sunny352787
        3
    sunny352787  
       2022-06-24 11:06:23 +08:00
    难不成你说的是 TCP/UDP/WebSocket/轮询 /长轮询...这类东西?
    hncqp
        4
    hncqp  
       2022-06-24 11:07:11 +08:00
    http
    Yuan2One
        5
    Yuan2One  
    OP
       2022-06-24 11:17:54 +08:00
    C++没有成熟的框架,或者解决方案这种吗
    ceflib
        6
    ceflib  
       2022-06-24 11:26:53 +08:00
    cpprestsdk
    2NUT
        7
    2NUT  
       2022-06-24 11:29:23 +08:00
    使用约定协议交互

    通常用 http websocket 等;
    ShayneWang
        8
    ShayneWang  
       2022-06-24 11:34:30 +08:00
    在用 Socket
    cheng6563
        9
    cheng6563  
       2022-06-24 11:41:19 +08:00
    你的前端是啥? cli ? gui ? web ?
    GeruzoniAnsasu
        10
    GeruzoniAnsasu  
       2022-06-24 11:48:07 +08:00
    c++后台一般不直接跟 web 交互

    可选的方式有:
    1. 编译成动态库,暴露 C ABI 的 API ,这样 goalng 之类的后台基本可以即插即用(需要共享一个头文件和一个不需要实现具体功能,即 stub 的动态库二进制文件)
    2. 使用 unix socket ,交互 json 数据或者 protobuf 之类的(无队列)
    3. 使用消息队列中间件,随便选一个两边语言都有 binding 的
    RatioPattern
        11
    RatioPattern  
       2022-06-24 11:58:34 +08:00
    queue
    GeruzoniAnsasu
        12
    GeruzoniAnsasu  
       2022-06-24 12:02:30 +08:00
    假设 c++库 /程序叫 core:

    - core 在内存中保存配置或者控制位
    - core 如果需要被外部控制,可以序列化成比较通用的结构化数据比如 json/msgpack ,外部控制器(比如 golang 写的 web 后端)来负责持久化它们,存取数据库之类的,core 只解析 web 后端传过来的结构化数据
    - 转发器直接将流量转到 core ,比如 nginx module 或者集成了 libpcap 的东西,它们可以直接通过 IPC 手段与 core 存取同一个共享 buffer
    - core 执行必要的计算并且在内存中保存计算状态
    - 等待 web 后端异步地来读取这个状态,或者 RPC 通知后端状态发生变化
    - 在 RPC 里传递计算结果,这时候就还是通用结构化数据
    wtsamuel
        13
    wtsamuel  
       2022-06-24 12:12:59 +08:00
    rpc 或者 restful 写法的 web api
    底层都是通过 socket 转发数据
    microxiaoxiao
        14
    microxiaoxiao  
       2022-06-24 12:17:01 +08:00 via Android
    这问题我熟悉呀,你提供一些接口,让做 web 服务器的在对应 url 路由调用你的函数,不然自己实现一个简单 HTTP
    alexsunxl
        15
    alexsunxl  
       2022-06-24 12:17:26 +08:00
    c++ --- java/go --- client

    通过 rpc ,中间加一层比较好。
    涉及到前后端对接和业务需求变动,中间这层变化老快了。你要是把所有和前度对接的逻辑都堆到 c++去,也不是不行,但是改动,编译,debug 这些老费劲了。
    coderluan
        16
    coderluan  
       2022-06-24 12:23:58 +08:00
    中间加一层+1
    renhou
        17
    renhou  
       2022-06-24 13:02:46 +08:00
    最常用的就是 websocket
    Yuan2One
        18
    Yuan2One  
    OP
       2022-06-24 14:28:52 +08:00
    中间比如说用 java/go 转一层不是合理的解决方式,相当于把 C++的算法封成 SDK 用呗,但是 C++操作控制器传感器这些更麻烦了,完了对系统资源要求也更高了
    jones2000
        19
    jones2000  
       2022-06-24 15:12:02 +08:00
    用 cpython 封装下, 直接用 py 做一个 webapi 就可以了, 省事。
    gainsurier
        20
    gainsurier  
       2022-06-24 15:34:10 +08:00 via iPhone
    oatpp 可以用这个 web 框架
    newmlp
        21
    newmlp  
       2022-06-24 16:06:06 +08:00
    rpc 或者 http
    xlzyxxn
        22
    xlzyxxn  
       2022-06-24 16:14:04 +08:00
    前台是 web 不就是 restful 吗,啥意思啊
    littlewing
        23
    littlewing  
       2022-06-24 16:17:14 +08:00
    grpc
    sleeepyy
        24
    sleeepyy  
       2022-06-24 16:46:39 +08:00   1
    3166
        25
    3166  
       2022-06-24 16:56:33 +08:00
    site:v2ex.com/t c++ http
    mingl0280
        26
    mingl0280  
       2022-06-24 17:07:12 +08:00 via Android
    后端吐 CGI 出来或者 JSON 字符串出来就完事了(需遵循 HTTP 协议,如果你要用 HTTP 的话),没啥难度。
    nightwitch
        27
    nightwitch  
       2022-06-24 19:00:48 +08:00
    cgi QQ 邮箱现在还在用,稳定服务几亿用户
    nightwitch
        28
    nightwitch  
       2022-06-24 19:04:15 +08:00
    不过老实说 C++处理字符串相关的很麻烦,调试起来也要反复编译,用在 web 这种场景很费力气。
    真不如用脚本语言粘一层。
    786375312123
        29
    786375312123  
       2022-06-24 19:13:53 +08:00
    protobuff
    EminemW
        30
    EminemW  
       2022-06-24 23:21:38 +08:00
    啊,为什么要在中间套一层 Java/Golang/Python , 难道 c++ 发展这么多年没有 http 库么,不应该把
    steins2628
        31
    steins2628  
       2022-06-25 12:15:30 +08:00
    http://stefanfrings.de/qtwebapp/
    都是 c++,可以看看这个,这样的话前后端分离,只要定 api 就行
    cwaken
        32
    cwaken  
       2022-06-25 12:42:44 +08:00 via iPhone
    usocket 库,17 写法
    linuxyz
        33
    linuxyz  
       2022-06-25 20:59:52 +08:00
    @littlewing 正解 gRPC Cpp Quick Start 走一波 https://grpc.io/docs/languages/cpp/quickstart/
    spygg
        34
    spygg  
       2022-06-26 10:04:53 +08:00
    看你具体需求了,一般来说就 http 和 websocket, 当然如果只是和前端交互的话 cef/webkit 之类的也可以
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5348 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 07:28 PVG 15:28 LAX 00:28 JFK 03:28
    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