gpt4 book ai didi

c++ - cgi 中的进程处理

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:46:04 26 4
gpt4 key购买 nike

我正在 Apache、Linux 中使用 C++ 进行简单的 Web 编程。我创建了一个名为 signup.cgi 的 cgi 脚本。该程序从浏览器获取输入并将数据写入名为 users.txt 的文件中。

我的问题是,当两个用户访问signup.cgi时,会创建两个不同的进程还是只创建一个进程?

情况一:会不会是两个不同的进程访问users.txt

User1 ----> singup.cgi -----> Pid1 ----> users.txt
User1 ----> singup.cgi -----> Pid2 ----> users.txt

(或)

情况2:是否只有一个进程访问users.txt

User1 ----> singup.cgi -----> Pid1 ----> users.txt
User1 ----> singup.cgi -----> Pid1 ----> users.txt

如果是两个不同的进程同时访问users.txtusers.txt中的数据就会被破坏。我该如何处理这个问题?

如果只有一个进程访问users.txt,不知道会遇到什么问题?

最佳答案

Apache 对进程的使用取决于您的服务器和 CGI​​“脚本”的配置方式。根据RFC 3875 :

  • 服务器调用的 CGI“脚本”可以是一个独立的程序,一个动态加载或共享库、(Apache 软件)服务器中的子例程或解释脚本(参见第 1.4 节)
  • "最常见的 CGI 实现调用脚本作为子脚本进程使用与服务器进程相同的用户和组。”(请参阅​​第 9.5 节)。但是管理进程池的 FastCGI variant 可以避免为每个请求启动新进程的开销。
  • 脚本应该是无状态的。参见第 9.7 节:

The stateless nature of the Web makes each script execution and resource retrieval independent of all others even when multiple requests constitute a single conceptual Web transaction. Because of this, a script should not make any assumptions about the context of the user-agent submitting a request.

为了加强这一基本建议,请考虑在可扩展操作中,您可能有一个负载平衡器,它将传入的 http 请求路由到多个 apache 服务器之一,而 apache 服务器可以将请求路由到一个或多个 FastCGI 服务。如果你认为无国籍,你就会安全!

总而言之:在您的 CGI 程序中,您不能对进程和用户做任何假设(如果您必须将相关请求放在一起,则必须管理 session )。

是的,如果多个进程同时写入同一个文件,您的文件中可能会出现真正的垃圾。您必须使用操作系统级别 interprocess synchronisation mechanisms来管理那个。信号量或文件锁可以对文件访问进行顺序化,但会降低性能。内存映射文件可以更轻松地提供帮助。

但要克服此限制,您必须实现架构上的飞跃。该主题过于宽泛,无法在此展开,但例如:

  • 消息队列的使用:每个进程将数据发送到消息队列(在另一个进程中),消息队列将尽快处理它,但不会延迟请求处理。
  • 使用面向服务的架构,其中每个进程将请求路由到服务,例如数据库或对象持久层。

关于c++ - cgi 中的进程处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38216818/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com