我想在Haskell中创建一个Web应用程序(例如,它可能是一个博客,论坛或一些动态网页),我需要什么?
(我知道我需要一个http服务器(例如apache或lighttpd)。我也知道我应该知道一些Haskell编程。)
如何让所有人一起工作?我不明白整个包/设置。
我需要mod_haskell或其他模块吗?
请问有人可以向我解释apache模块的工作原理以及如何安装它们吗?
答案 0 :(得分:6)
对标题问题的简短回答:是。
请参阅http://hackage.haskell.org/package/cgi
<强> Network.cgi 强>
用于编写CGI程序的简单库。看到 http://hoohoo.ncsa.uiuc.edu/cgi/interface.html 对于CGI规范。
这是一个简单的例子,包括错误处理(并不是说有很多东西可以去 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
答案 1 :(得分:6)
让我们假设您正在使用您选择的编程语言创建一个动态网站。
当用户访问您的网站时,他们向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 Container和编程语言运行库之间的第二层接口。
所以你正在使用的图层看起来有点像这样:
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作为例子,但你可以找到大多数主流语言(以及很多深奥的语言)的等效mods和cgi容器,你正在使用的Http堆栈在大多数情况下会大致相似
答案 2 :(得分:1)
也许您可能会发现HAppS有用。