【问题标题】:FastCGI / SCGI pre-forkFastCGI / SCGI 前叉
【发布时间】:2011-10-11 10:50:40
【问题描述】:

我一直在尝试实现一个 Web 服务器网关(出于娱乐和教育目的),我对 FastCGI/SCGI 背后的核心架构与 pre-fork 模型有一些疑问。

FastCGI/SCGI 实现如何处理 pre-fork 场景中的通信? AFAIK,网关只有一个套接字来连接到 FastCGI 服务器。通常,有一个父进程接受来自网关的连接并将工作交给预先分叉的工作人员之一。

既然在孩子分叉之后建立了连接,你应该如何让孩子们使用这些套接字与网关进行通信?

【问题讨论】:

    标签: sockets fastcgi scgi preforking


    【解决方案1】:

    希望我理解了这个问题。

    服务器套接字应该由父进程创建;当它分叉时,子代继承该套接字,使其成为共享资源。然后,我想,每个孩子都尝试同时接受()连接。

    作为参考,我发现 this document(参见“接受序列化”)讨论了在侦听多个套接字时的饥饿问题,以及 this SO discussion 在共享套接字时讨论

    【讨论】:

    • 不错的发现。 SO讨论绝对值得一读。我也喜欢它同时适用于 UNIX 和 Windows 系统。如需促进负载平衡的解决方案,请查看Nikolai's answer
    【解决方案2】:

    一个选项是file descriptor passing over UNIX 域套接字。 Stevens UNP 有basic example

    【讨论】:

    • 这看起来很简单,并且允许父进程更容易地执行负载平衡。它是特定于 UNIX 的,但这种类型的设计首先是特定于 UNIX 的。知道这在 UNIX 系统之间的可移植性如何(例如,这是一种可选但常见的行为)吗?
    • AFAIR Windows 具有类似的功能,请参阅@ftartaggia 答案中的链接。
    猜你喜欢
    • 2011-03-14
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    • 2011-10-21
    • 2015-08-18
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多