基本上做 Web 开发需要的功能,比如 json ,静态文件,form ,Cookie 都支持的比较完整。而且还是一个纯异步的 web 引擎,性能相当可观。
#include "wfrest/HttpServer.h"
using namespace wfrest;
int main()
{
HttpServer svr;
// curl -v http://ip:port/hello
svr.GET("/hello", [](const HttpReq *req, HttpResp *resp)
{
resp->String("world\n");
});
// curl -v http://ip:port/data
svr.GET("/data", [](const HttpReq *req, HttpResp *resp)
{
std::string str = "Hello world";
resp->String(std::move(str));
});
// curl -v http://ip:port/post -d 'post hello world'
svr.POST("/post", [](const HttpReq *req, HttpResp *resp)
{
// reference, no copy here
std::string& body = req->body();
fprintf(stderr, "post data : %s\n", body.c_str());
});
if (svr.start(8888) == 0)
{
getchar();
svr.stop();
} else
{
fprintf(stderr, "Cannot start server");
exit(1);
}
return 0;
}
1
hotcool100 2021-12-24 17:00:48 +08:00 13
我疯了用 C++ 写 RESTful
|
2
rophie123 2021-12-24 17:07:35 +08:00 via iPhone
Qt 也有个,之前写过
|
3
hushulin 2021-12-24 17:15:20 +08:00
工作还是不够饱和
|
4
ipwx 2021-12-24 17:21:11 +08:00 2
不错不错。好像还是基于 sogou workflow 库的,也不算是 start from stratch 。
@hotcool100 @hushulin 当你碰巧有一个 C++ 服务需要暴露简单的 API ,这东西就非常有用了。 |
6
Buges 2021-12-24 17:40:51 +08:00 via Android
@ipwx c/cpp 服务需要 Web API 的,一律用 CGI ,简单省事,不用写这些东西折磨自己。
|
7
zachlhb 2021-12-24 18:47:03 +08:00 via iPhone
是什么想不开要拿 c++写 restful ?
|
8
ipwx 2021-12-24 18:59:09 +08:00
|
10
ipwx 2021-12-24 19:02:07 +08:00
|
11
ragnaroks 2021-12-24 19:17:09 +08:00 1
只写脚本的是理解不了一个可执行程序不但有图形界面还有 HTTP 接口的
|
12
Buges 2021-12-24 19:42:13 +08:00 via Android
@ipwx
针对你说的“碰巧有一个 C++ 服务需要暴露简单的 API”,我觉得起个 CGI ,简单的 IPC 好过引入这么一大坨东西,太多无谓的复杂度了。 |
13
shayuvpn0001 2021-12-24 22:26:26 +08:00
见过 MIPS 处理器的路由器里面,用 printf 输出 web 页面的。资源有限,又需要实现一些功能的场景,还是有很多的。
|
14
ffire 2021-12-25 00:01:01 +08:00 via iPhone
看了这贴,多少能理解为啥现在的 web ,呃,不知道如何形容,就说这么让人难受吧,更让人难受的是,他发展的趋势是朝着更让人难受的方向。
|
15
tairan2006 2021-12-25 13:36:05 +08:00
某些场景还是有用的
但是写 web 的话,std::string 就能把你搞的欲仙欲死( |
16
jazzg62 2021-12-25 15:09:37 +08:00
之前用过,当作 electron 的子进程来执行,但是,这玩意是真麻烦,艹
|
17
iQXQZX 2021-12-25 15:45:06 +08:00
还有一个叫 libhv
|
18
Calatrava OP @iQXQZX 还有一个 header only 的 cpp-httplib ,但是纯同步的。
|
19
c0xt30a 2021-12-25 19:26:14 +08:00
|
20
ipwx 2021-12-25 21:11:04 +08:00
@Buges 。。。不是,你是不能理解 C++ 需要对外提供服务嘛?
服务内核是完全独立的,外部需要一个 gui 去操纵这个服务。C++ 服务可能部署在 vps 或者阿里云或者 kubernetes 里面,gui 管理程序可能是 qt 或者 c# 写的。这种场景你给 c++ 一个 http 接口难道不是最优解嘛? |
21
ipwx 2021-12-25 21:12:18 +08:00
@Buges 而且你起个 cgi ,你是每个请求都要启动一个 c++ 服务。但我说了,这个 c++ 服务就是独立的进程,nginx 那种基础设施,gui 或者 web app 才是外挂的管理程序。你是除了 web 开发那三板斧一点都不懂啊
|
23
Buges 2021-12-26 00:29:03 +08:00 via Android 1
@ipwx CGI 启动的进程当然不是 damon 主程序,这还用说吗,需要啥数据通过 IPC 拿。关键是这样能把 Web 相关的一系列复杂度都抽离出去,程序里不用引入协议、路由、tls 等等一堆东西,每连接一个进程也不用关心锁、内存泄漏等问题。这个库看起来“容易”并不代表“简单”,依赖庞大,出了问题 backtrace 加长一截,都是不必要的复杂度。
至于 nginx 那些怎么能一概而论,我回复的一直都是“碰巧有一个 c/cpp 服务需要暴露简单的 HTTP API”这个问题,像是提供 metrics 统计信息、提供 API 给前端面板等简单需求,不值当引入这些复杂度。 |
24
coolmenu 2021-12-26 10:20:25 +08:00
我的第一反应也是用 IPC 就可以了,或者用 zeromq ,都比这个 http 的服务要好得多
|
26
ClarkAbe 2021-12-26 15:39:58 +08:00
阔怕.....我之前也想过用纯 C 写...结果写着写着放弃了太难了....后面用 Golang 挺顺手的......
|
27
ysc3839 2021-12-26 19:55:20 +08:00 via Android
|
28
ipwx 2021-12-26 21:55:02 +08:00
@Buges 不,一个是只要部署一个 C++ 程序,另一个是还要配合一个转接 zeromq 的 cgi 程序 + ipc ,到底哪个复杂,你还要杠嘛?
|
29
c0xt30a 2021-12-26 23:05:32 +08:00
@cpprookie 这个可能还是要看个人口味了。如果让我选,我可能选 crow ,因为它是 header-only 的。当然 wfrest 也有别的优势 -:)
|
30
Buges 2021-12-26 23:07:24 +08:00 via Android
@ipwx 给用户部署的话当然是单程序集成了更“容易”。IPC 具体要看情况,比如给一个服务实现一个动态加载配置文件的 post 接口,直接把内容写到配置文件然后 SIGHUP 就可以;比如给 redis-server 实现统计 API ,直接用 redis client 就可以;比如给内核模块写个监控 API ,暴露个 procfs 就可以;再比如写个运维面板,和 systemd 等服务直接通过 dbus 就可以。总之很多情况,用 signal 、文件、pipe 、socket 等简单方式,或易集成的或已有的专用协议、rpc 、message pass 等,都可以避免在主程序中引入 Web 相关的一系列复杂度的前提下满足需求。
|
31
ppphp 2021-12-27 01:07:19 +08:00
c++写网页,我比程序先崩溃
|
32
chtcrack 2021-12-27 13:28:37 +08:00
@ipwx 你和那些 web 程序员讲 c++,很多人都不懂的..甚至还有人认为 c++过时的..他们用着 c++大神开发出来的语言,开发 web,然后说 c++过时..是不是很有趣?
|
33
ipwx 2021-12-27 15:10:21 +08:00
@chtcrack 对对对,上面一群没用过 C++ 的,在和我这个今年写了八万行 C++ 的人辩论,C++ 里面到底是内嵌一个 HTTP 服务器暴露给前端 /GUI 更方便,还是引入 IPC 用 CGI/FastCGI 暴露给前端更方便。笑死我了
|
34
hutoer 2021-12-28 08:54:51 +08:00 1
好多年前,我接到一个任务,开发一个响应时间极低(具体多少现在忘了)的 web 服务,我就用 libevent 和 C++编写,效果很好:快、稳。
|
35
LANB0 2021-12-28 09:41:34 +08:00 1
上面要用 CGI 的朋友,当碰到需要完成一个设备 web 时候,拿 CGI 去写几百上千个接口,还得配合前端的同事实现前后端分离,不知道是什么感觉。
|
37
ipwx 2021-12-28 10:24:32 +08:00
|
38
frodez 2022-02-01 19:37:38 +08:00
workflow 和 asio (无论是 boost 版本还是非 boost 版本)相比,或者与 libevent,libuv 相比,有何优势或者特殊之处?
|