【问题标题】:How is FastCGI implemented under Windows?Windows下FastCGI是如何实现的?
【发布时间】:2020-03-21 23:38:07
【问题描述】:

FastCGI 官方文档称stdin 在启动 FastCGI 模块时被重新用作侦听套接字。这在 Linux 上很棒,stdin 和套接字都是ints,但我认为它不能在 Windows 上工作,stdinFILE*,套接字是 HANDLE

由于 Windows 服务器确实支持 FastCGI,因此有人找到了一种使它们兼容的方法,或者为该操作系统重新定义了系统。不过,我的 Google-fu 似乎无法定位 如何。我在哪里可以找到有关它的文档?

【问题讨论】:

  • 维基百科文章提到“Unix 域套接字、命名管道或传输控制协议 (TCP) 连接”。
  • 所有这些在 Linux(或 UNIX,或 MacOSX)下都是 ints,但在 Windows 下是 HANDLEs(完全可以这样做)。我可以相信 Windows FastCGI 系统会使用管道或 TCP 连接,但是如何将其传递给 FastCGI 程序?重新利用int(0)stdin 方法对他们不起作用。这就是我要的文档。
  • 我显然仍然没有看到问题。在 C++ 中,我们得到一个 streambuf,所以它内部的实现方式并不重要。您能否更详细地描述实现以使问题更清楚?
  • 这就是我所要求的——实施。 streambuf 是如何传递给在 Windows 下运行的 FastCGI 程序的?规范中概述的方法在 Windows 下不起作用,但 FastCGI 程序已经适应在 Windows 下工作——我试图弄清楚如何,最好是使用有关所用方法的实际文档。
  • 也许规格不正确。你得到streambuf,但你没有得到stdin

标签: windows fastcgi specifications


【解决方案1】:

FastCGI 只定义了消息交换协议,但 FastCGI 背后的人也为 C++ 提供了该协议的一种实现。在此实现中,您的应用程序必须使用提供的FCGX_Request 对象将三个提供的FCGX_Stream 对象重新连接到通常的对象(cin、cout、cerr)。但我怀疑您不必重新连接流,并且可以直接使用它们。看看这个FastCGI Hello World 看看它是如何完成的。

因此,您的应用看不到 HANDLEFILE*。它看到的是fcgi_streambuf,它继承自std::streambuf。前面提到的协议的实现方式只是一个你不应该关心的细节。实现获取字节流并将其提供给应用程序,反之亦然。

【讨论】:

  • 谢谢,但这是我非常需要的一个细节,因为我正在编写自己的 FastCGI 库。 :-) 据我了解,原来的 FastCGI 库不支持 Windows(这是有道理的,因为我在问题中概述了问题)。
猜你喜欢
  • 2016-03-23
  • 2010-09-23
  • 1970-01-01
  • 2017-03-07
  • 1970-01-01
  • 2016-12-13
  • 2020-01-31
  • 1970-01-01
  • 2020-03-20
相关资源
最近更新 更多