充当 API 的 C 程序

C program that acts as APIs

抱歉,我对这个问题缺乏相关知识,但是: 如果我想创建一个使用 Apache 作为 Web 服务器来公开 REST API 层的 C 应用程序,则有 2 个选项(至少这 2 个我在谷歌搜索中找到)

  • using CGI .

  • implement an Apache extension i.e hello_world.so and then load in the Apache configuration

它们在进程创建、开销、滞后等方面的主要区别是什么?

谢谢。

使用 CGI,一个 运行 应用程序在一个单独的进程中。

使用Apache扩展,该应用程序是Apache的加载模块,可以运行与Apache在同一个进程中。

为了性能,您可能希望在同一进程中使用它;但是,如果您有编码错误,它会导致 Apache 宕机。

为了稳定性,您可能希望它在不同的进程中;但是,与启动和停止进程相关的成本将是请求处理中的永久性开销,这将限制您可以维护和服务的连接数。

有妥协,但不应将其视为两全其美。 FastCGI 通过重用 Apache 使用的 CGI 进程来工作。但是,它仍然比 Apache 模块慢,并且会产生更多开销,但该开销通常低于传统的 CGI。

您可以考虑编写一些 FastCGI application, and configure your Apache server to speak FastCGI with it. Then you won't (in contrast to old CGI) 为每个 HTTP 请求启动一个进程,并且您的应用程序将服务多个 HTTP 请求(由 Apache 转换为 FastCGI 请求)并可能在它们之间保持一些状态。

您甚至可以在您的应用程序中使用一些 HTTP 服务器库,例如 libonion(然后它会变成一些专门的 HTTP 服务器)。然后您甚至不需要任何 Apache 服务器(或者您可以配置 Apache 服务器将一些 HTTP 请求转发到您的应用程序)。

您当然需要了解更多HTTP protocol itself and its requests and replies header fields, and HTTP cookies

顺便说一句,任何 Apache 扩展都是特定于 Apache(不适用于大多数其他 HTTP 服务器),并且可能特定于它的版本。