【问题标题】:FastCGI or HTTP server for C++ daemon behind nginx proxynginx 代理后面的 C++ 守护程序的 FastCGI 或 HTTP 服务器
【发布时间】:2015-10-04 13:08:04
【问题描述】:

对于通过 Web 界面访问的高性能应用程序,实现/重用一些 http 服务器或使用 fastcgi 是否有意义?我确信 fcgi 是正确的选择,但我遇到了https://ef.gy/fastcgi-is-pointless,现在我不太确定..

HTTP 不允许一次处理多个会话,但这可以通过生成多个守护进程并让 nginx 充当平衡器来解决。但它可能会更更容易测试。

另一方面,fcgi 似乎已经具备所有必要的高性能部分(在一个进程中多路复用请求,因此更容易实现缓存......)。

除了更易于调试之外,HTTP 与 FastCGI 相比是否有任何优势?

注意:安全不是什么大问题,因为 fcgi 或 http 将在 nginx 代理之后运行。

【问题讨论】:

  • 为什么不完全跳过 NGINX 服务器并使用 Restbed 框架实现您的解决方案?披露,我是作者。 github.com/corvusoft/restbed
  • 类似于 nginx 用于提供静态内容。对休息床:虽然我必须承认它看起来非常有趣,但我对许可条款并不那么热衷。我总是喜欢每个开发人员更多的许可证,而不是每个安装站点。但除此之外,它看起来很酷,有时可能会尝试一下。一个问题。我希望Session::wait_for 可以用来暂停当前方法的执行并让其他请求得到处理。但是有可能以某种方式等待条件变量吗?遗憾的是,等待时间不会提前知道..
  • 正确的 wait_for 仍将允许其他请求以非阻塞方式进行。关于条件变量问题,我目前正在研究以下功能:Session::wait_until(trigger, callback( session, future))。
  • 嗯,那会很酷。我可以将繁重的处理卸载到其他线程,同时保持“gui”一个免费的输入/输出..出于好奇,你有这个功能的 ETA 吗?
  • 如果您通过跟踪器提出问题。我会优先考虑这个周末,最迟下周末;并随时通知您。

标签: c++ http fastcgi


【解决方案1】:

另一方面,使您的 C++ 应用程序成为一个专门的 Web 服务器(例如,使用 libonion 或 Wt 库,甚至是 POCO)将使其非常容易调试。两者都可以以会话感知方式使用,并将处理细节(缓存、分块编码、传输压缩……)。我猜(但不知道)它们的 HTTP 性能可能会略低(这两个库可能没有像传闻中的 nginx 那样优化)。而且它们可能最适合几十个(或数百个)同时活跃的用户,而不是数千个(但我不知道,并且从未在这么多用户中使用过它们......)。

也许您可能有真正的用户案例(这实际上取决于应用程序实际在做什么,以及您是否有运行 Linux 或其他 POSIX 系统的用户...)

顺便说一句,如果你知道(或想学习)Ocaml,你甚至可以使用ocsigen;如果您知道 Scheme 或其他 Lisp,请考虑 HOP;如果你愿意学习一门新语言,可以考虑OPA(或者Haxe)。所有这些野兽都使您能够轻松混合服务器端和浏览器端计算。

【讨论】:

  • libonion 仅适用于 linux?从链接看起来是这样的。除此之外,它看起来很酷。关于 Wt,我不知道,我试过了,发现整个 web-like-gui-app 概念不太适合我.. 不是说 Wt 不好,它只是我..
【解决方案2】:

充当 HTTP 服务器将迫使您实现一些与应用的业务逻辑无关的事情。这包括但不限于:保持活动、分块编码、解码表单数据和许多其他小事或大事。我宁愿坚持使用 fastcgi,因为它需要的传输级协议知识较少。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多