我想在 Haskell 中制作一个 Web 应用程序(例如,它可以是博客、论坛或一些动态网页),我需要什么?
(我知道我需要一个 http 服务器(例如 apache 或 lighttpd)。我也知道我应该知道一些 Haskell 编程。)
我如何让这一切一起工作?我不明白整个包/设置。
我需要 mod_haskell 或其他模块吗?
请有人向我解释一下 apache 模块是如何工作的以及如何安装它们?
我想在 Haskell 中制作一个 Web 应用程序(例如,它可以是博客、论坛或一些动态网页),我需要什么?
(我知道我需要一个 http 服务器(例如 apache 或 lighttpd)。我也知道我应该知道一些 Haskell 编程。)
我如何让这一切一起工作?我不明白整个包/设置。
我需要 mod_haskell 或其他模块吗?
请有人向我解释一下 apache 模块是如何工作的以及如何安装它们?
让我们假设您正在使用您选择的编程语言创建一个动态网站。
当用户访问您的站点时,他们会向http://name-of-your-site.com发出请求,并将其传递到您的服务器。
当请求到达端口 80 时,它会被您的 HTTP 服务器收集,该服务器可能是 Apache,但也可能是 LightHttpd 或任何其他 HTTP 服务器。这将收到请求并决定如何处理它。
现在假设您的网站是用 python 编写的,它将在某处存储为一堆 .py 文件,因此需要将请求传递给 python 运行时,并说明要运行什么文件以及从哪里返回输出文件。这是 mod_python 的作用——从服务器获取请求并将它们交给运行时。大多数 mod 还处理线程池 - 假设您在一分钟内有 20 个请求,如果每个请求都以简单的方式传递给 python 运行时,那么您将有 20 个 python 线程全部启动,一起运行,然后随着进程完成而死亡. 通常,Apache mods 会保持一些线程启动并运行,以节省启动时间并将新请求传递给现有线程之一,以便当它完成一个请求时,它会通过接口传递另一个请求。CGI 容器以稍微不同的方式完成相同的工作,您可能会选择其中一个的原因可能与您使用的 HTTP 服务器有关(例如,mod_python 是为 Apache 设计的,例如,FastCGI 之类的东西更多地用于LightHttpd ) 和性能考虑。如果您使用的是 FastCGI 之类的东西,那么您可能需要在 CGI 容器和编程语言运行时之间建立第二层接口。
所以你正在使用的图层看起来有点像这样:
HTTP Server-> CGI Layer -> Programming Language Runtime -> your code
Apache -> mod_python -> Python Runtime -> index.py
LightHttpd -> FastCGI+python_cgi -> Python Runtime -> index.py
显然,我在这里使用了 Python 作为示例,但是您可以找到大多数主流语言(以及许多深奥的语言)的等效模块和 cgi 容器,并且您正在使用的 Http 堆栈在大多数情况下将大体相似。
对标题问题的简短回答:是的。
见http://hackage.haskell.org/package/cgi
网络.cgi
用于编写 CGI 程序的简单库。有关 CGI 规范,请参阅 http://hoohoo.ncsa.uiuc.edu/cgi/interface.html 。
这是一个简单的例子,包括错误处理(并不是说 Hello World 有很多问题)
import Network.CGI
cgiMain :: CGI CGIResult
cgiMain = output "Hello World!"
main :: IO ()
main = runCGI (handleErrors cgiMain)
关于零件的整合。
CGI 是 Web 服务器和一些外部程序之间的编程协议和接口,通过标准输入和输出进行通信并共享环境变量。
您需要一个支持 CGI(大多数都支持)的 Web 服务器,并且您必须对服务器进行配置,以便对于某些特殊请求(例如,具有某些特殊文件扩展名的 URL),它会调用 CGI 程序。对于 Apache Web 服务器,请参阅http://httpd.apache.org/docs/2.0/howto/cgi.html
也许您会发现HAppS很有用。