【发布时间】:2011-01-13 20:44:24
【问题描述】:
我想在 shell 脚本中使用 FastCGI。 我找到了几个关于在 shell 中编写 CGI 脚本的教程,但没有关于 FastCGI,我猜这不是一回事。
有可能吗,怎么做?
谢谢
编辑: Ignacio:谢谢,但此链接已有 14 年历史,并且表示当前不支持。它仍然不受支持吗?
【问题讨论】:
我想在 shell 脚本中使用 FastCGI。 我找到了几个关于在 shell 中编写 CGI 脚本的教程,但没有关于 FastCGI,我猜这不是一回事。
有可能吗,怎么做?
谢谢
编辑: Ignacio:谢谢,但此链接已有 14 年历史,并且表示当前不支持。它仍然不受支持吗?
【问题讨论】:
FastCGI 的重点是避免为每个传入连接生成一个新进程。就语言的本质而言,shell 脚本在执行过程中会产生许多进程,除非您想极大地限制自己。 (没有cat、awk、sed、grep 等)。所以从一开始,如果你打算使用 shellscript,你最好使用常规 CGI 而不是 FastCGI。
如果您仍然下定决心,第一个大障碍是您必须在由网络服务器提供的侦听套接字上进行accept() 连接。据我所知,没有 UNIX 工具可以做到这一点。现在,您可以用其他语言编写一个,它可以为每个传入连接运行一次 shellscript。但这正是普通 CGI 所做的,我保证它比您或我编写的自定义程序做得更好。再说一次,如果你想使用 shellscript,请坚持使用普通的 CGI。
【讨论】:
nc -k -l 0.0.0.0 10000 > out.txt 呢?
nc -k -l /dev/fd/3,其中文件描述符 3 由网络服务器传递给脚本。
“如果你下定决心,第一个大障碍是你必须在网络服务器提供的监听套接字上接受()连接。据我所知,(...)”有一个 C 程序几乎这样做:exec_with_piped.c
(它使用管道,而不是套接字,但 C 代码应该很容易适应您的目的)
查看“在 sh 中编写代理:通过管道进行对话”
http://okmij.org/ftp/Communications.html
卡洛
【讨论】:
如果这是一个愚蠢的问题,我提前道歉,但它是 可以想象使用纯 shell 脚本(sh 或 ksh)作为 FastCGI 程序,如果是,如何?
您不能将简单的 shell 脚本用作 FastCGI 程序。自从 shell 脚本不能跨多个 HTTP 请求持续存在,它不能 用作 FastCGI 应用程序。为程序处理多个HTTP 在它自己的生命周期中请求(即不仅仅是处理请求并死掉,比如 CGI 应用程序),它需要某种方式与 Web 服务器通信 接收请求,并在处理后将回复发送回服务器 它。这种通信是通过 FCGI 库完成的,该库实现 以上,它目前只支持编程语言的一个子集, 像 C、Perl、Tcl、Java... 简而言之,它不支持 shell。 希望能澄清一点。 斯坦利。
【讨论】:
FastCGI 很简单,因为它实际上是只有几个扩展的 CGI。
还有:
与 CGI 一样,FastCGI 也是独立于语言的。
因此您可以将 FastCGI 与 shell 脚本或任何其他类型的脚本一起使用,就像 CGI 一样。
CGI 教程对于学习 FastCGI 也很有用,除了设置 Web 服务器的特殊性。
【讨论】: