1

我正在用 C++ 编写一个程序,它将一直在后台运行以执行不同的任务 - 一个守护进程。
除了通常的任务之外,Web 应用程序还应与其通信(执行 COMET 模式的 AJAX 请求 = 大量打开但处于休眠状态的连接)。

所以问题是:我应该如何将它连接到 Web 服务器(apache 和 lighttpd 是相关的)?

在我读过的内容中,FastCGI 对这项任务非常有趣,但我读过的所有参考资料都在谈论必要时启动 FastCGI 应用程序的 Web 服务器。这在这里行不通,因为守护进程已经在运行...

我还读到,Web 服务器将通过套接字与 FastCGI 应用程序对话——所以这对我来说可能是一个入口点,守护进程“只”需要与这样的套接字对话。

但是有没有好的图书馆可以用来做这件事?查看http://cppcms.com/wikipp/en/page/main
的功能对我来说看起来很有趣 - 但在我的情况下可以吗?它是否可以被剥离 - 甚至提供一个 SQL 连接对我的情况来说太重了......

那么你能给我什么建议呢?

PS:性能方面,我认为单线程但异步实现将适用于守护进程 <-> Web 服务器胶水。

4

1 回答 1

1

FastCGI 是与 Web 服务器通信的标准协议。所有提到的 Web 服务器都可以通过 fastcgi 与远程守护程序应用程序通信。

http://cppcms.com/wikipp/en/page/cppcms_1x_tut_web_server_config

此外,如果您正在寻找 Comet 支持,那么 CppCMS 可以为您提供原生支持:

http://blog.cppcms.com/post/107

它是否可以被剥离 - 甚至提供一个 SQL 连接对我的情况来说太重了......

CppCMS 库非常小,它也允许减小它的大小:

http://cppcms.com/wikipp/en/page/cppcms_1x_build#Build.Options

SQL 连接 CppDB 也是独立的部分。

性能方面,我认为单线程但异步实现将适用于守护进程 <-> Web 服务器粘合。

它是标准 CppCMS 运行模式之一——运行异步 Web 应用程序。

更新:

在我读过的内容中,FastCGI 对这项任务非常有趣,但我读过的所有参考资料都在谈论必要时启动 FastCGI 应用程序的 Web 服务器。这在这里不起作用,因为守护进程已经在运行..

确实有些网络服务器启动了快速的 cgi 应用程序,但是:

  • Lighttpd 允许同时启动 FastCGI 和 SCGI 应用程序或连接到独立的应用程序
  • Cherokee (AFAIR) 允许同时启动 FastCGI 和 SCGI 应用程序或连接到独立的应用程序
  • 阿帕奇:

    • mod_fascgi允许同时启动 FastCGI 应用程序或连接到独立的应用程序
    • mod_scgi连接到独立应用程序 - 不启动应用程序。
    • mod_fcgid总是启动应用程序 - 不适合你

    同样作为一般说明,apache 不适合处理许多空闲连接的模式,因为它使用每个连接的线程(甚至取决于 mpm 的进程)。

  • Nginx - 根本不启动应用程序,但是由于缓冲,fastcgi 目前不是彗星流的最佳选择,所以 SCGI 使用 nginx 会更好(假设您使用的是最新的 nginx 版本)

小提示:SCGI 是一个与 FastCGI非常相似但简单得多的协议。

于 2012-08-20T19:55:12.173 回答