我正在设计一个应用程序,该应用程序将包含 3-4 个服务,这些服务作为单独的进程运行并通过合适的 IPC 链接。该系统将有一个网络界面,我想使用那里的任何网络服务器。

应该在某个 URL 下访问 Web 界面,该 URL 允许同一 Web 服务器上的其他 URL 执行完全不同的操作。我计划使用该 URL 下面的路径来指定 Web 界面应该执行的操作。它具有供其他应用程序通过网络使用以及供人们在浏览器中交互的设施。

即兴地,我会按如下方式工作:

  • 让网络服务器为收到的每个请求启动一个 CGI 进程(如 Apache 中的 SetHandler)
  • 让CGI连接到IPC
  • 让它从后端服务获取所需的一切
  • 让 CGI 根据服务的答案返回 HTML / XML 以及任何 HTTP 状态

现在,我真正想要的是避免前两个步骤,或者如果我不能,请避免第二个步骤,因为我担心我在不必要的开销上浪费了性能(来自其他应用程序的请求可能很频繁) )。

例如,PHP 可以打开与 MySQL 数据库的持久连接,该连接在脚本运行时仍然存在,并且下次不需要重新创建,尽管我不知道它们实际上是如何做到的。另外,据我了解,Apache 模块在服务器启动时加载一次,因此这可能会删除第一步,但会将我与 Apache 联系起来。

那么,将特定 URL 的处理程序挂接到不同的 Web 服务器的好方法是什么?我不想处理 HTTP,否则我可能只是使用第二个服务器的代理设置,但这似乎是重新发明轮子。如果您认为 CGI 很好并且有处理大量类似结构请求的示例,请告诉我。

有帮助吗?

解决方案

好吧,我之前忽略了这一点。在这里解释我的问题让我想到了这个问题:

FastCGI 可以使用单个持久进程,在其生命周期内处理许多请求,而不是为每个请求创建一个新进程。-- 维基百科:快速CGI

其他提示

即使在中等负载下,CGI 也是一个相当不可扩展的野兽。FastCGI 是一个选项,但您可能还会找到 mod_XXXX 包,其中 XXXX 是您的语言名称。例如,有一个针对 ruby​​、perl 和 python 的 mod,可能还有其他几个。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top