2009-12-29 6 views
4

하스켈에서 웹 응용 프로그램을 만들고 싶습니다 (예 : 블로그, 포럼 또는 일부 동적 웹 페이지 일 수 있음). 무엇이 필요합니까?Haskell을 사용하여 CGI 스크립트를 작성하려면 어떻게해야합니까?

가 어떻게 그것을 모두 함께 작동하도록 않는다 (나는. 나는 또한 내가 어떤 하스켈 프로그래밍을 알아야 할 것을 알고있다.) I는 아파치 또는 lighttpd를 같은 HTTP 서버를 (필요) 알고? 전체 패키지/설정을 이해하지 못합니다.

mod_haskell 또는 다른 모듈이 필요합니까?

누군가 제게 아파치 모듈의 작동 방식과 설치 방법을 설명해 주실 수 있습니까?

+0

나는 공격적이지는 않지만 인터넷에서 반복해서 쓰여졌습니다. 하스켈이나 서버를 만드는 방법에 대해 알고 싶습니까? –

+0

아니, 나는 모든 mod_somthing http 서버와 프로그래밍 언어가 어떻게 작동하는지 explantion을 원하십니까? 그들은 모두 어떻게 연결되어 있습니다 :-) – mono

+0

moshe : 귀하의 질문은 매우 광범위하며 다양한 방법으로 대답 할 수 있습니다. 예를 들어 mod_php와 mod_python 모듈은 * Apache * 확장 모듈이므로 Apache 스택과 함께 작동합니다. 내가 아는 mod_haskell은 없다. CGI의 성능 특성은 작업하는 언어에 따라 매우 다를 수 있지만 모든 웹 서버 (Apache 포함)는 CGI (Common Gateway Interface)를 지원합니다. 이는 CGI의 또 다른 방법입니다. 즉, 유용한 대답을 얻으려면 질문을 하나의 언어 또는 하나의 웹 서버로 제한해야합니다. –

답변

6

프로그래밍 언어로 동적 웹 사이트를 만드는 경우를 생각해 봅시다.

사용자가 귀하의 사이트를 방문하면 http://name-of-your-site.com에게 요청하여 귀하의 서버로 전달됩니다.

요청이 포트 80에 도착하면 HTTP 서버 (Apache 일 가능성이 높지만 LightHttpd 또는 기타 HTTP 서버 일 수 있음)가 요청을 수신합니다. 그러면 요청이 수신되고 처리 방법이 결정됩니다.

이제 사이트가 파이썬으로 작성되었다고 가정하면 .py 파일이 어딘가에 저장되므로 요청을 실행할 파일과 반환 할 위치에 대한 지침이 포함 된 Python 런타임에 전달해야합니다. 그 파일의 출력. 이것은 mod_python의 역할입니다 - 서버에서 요청을 받아서 런타임에 넘깁니다. 대부분의 개조자는 또한 스레드 풀링을 처리합니다. 각 요청이 간단한 방식으로 파이썬 런타임에 넘겨지면 20 개의 요청을 가지고 있다고 가정하고 함께 시작하여 함께 실행 한 다음 20 개의 파이썬 스레드를 실행하게됩니다. .일반적으로 Apache mod는 몇 개의 스레드를 계속 실행하여 시작 시간을 절약하고 새로운 요청을 기존 스레드 중 하나에 전달하여 하나의 요청을 완료하면 인터페이스에서 다른 요청을 전달합니다. 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 

, 나는 여기에 예를 들어 파이썬을 사용하고 있지만, 대부분의 주류 언어에 대한 동등한 개조 및 CGI 컨테이너를 찾을 수 있습니다 (그리고 많은 밀교적인 것들)과 당신이 작업하고있는 Http 스택은 대부분의 경우 거의 비슷합니다.

+0

많은 사람에게 고마워합니다 일부 사항을 정리하는 데 절대적으로 도움이됩니다 :-) – mono

1

아마 HAppS이 유용 할 수 있습니다.

+2

HAppS가 고아가되었으므로 http : // happstack을 사용해야합니다. 대신 – hiena

5

제목에 대한 짧은 답변 : 예.

는 CGI 프로그램을 작성하기위한 http://hackage.haskell.org/package/cgi

Network.cgi

간단한 라이브러리를 참조하십시오. CGI 사양에 대해서는 http://hoohoo.ncsa.uiuc.edu/cgi/interface.html 을 참조하십시오.

다음은 부품의 통합에 관한 오류 (안녕하세요 잘못 을 갈 수있는 그 정도가하지 않는 것이) 처리

import Network.CGI 

cgiMain :: CGI CGIResult 
cgiMain = output "Hello World!" 

main :: IO() 
main = runCGI (handleErrors cgiMain) 

포함, 간단한 예입니다.

CGI는 웹 서버와 일부 외부 프로그램 간의 프로그래밍 프로토콜 및 인터페이스로 표준 입력 및 출력과 공유 환경 변수를 통해 통신합니다.

CGI (대부분 수행)를 지원하는 웹 서버가 필요하며 CGI 프로그램을 호출하는 일부 특수 요청 (예 : 특수 파일 확장자가있는 URL)을 사용하도록 서버를 구성해야합니다. Apache 웹 서버의 경우 http://httpd.apache.org/docs/2.0/howto/cgi.html

+0

코멘트를 주셔서 감사합니다,하지만 특정 언어와 함께하고 싶지 않아요. 내가 약간의 ezoteric이기 때문에 나는 언급했다 :-). mod_somthing, http 서버 및 언어가 모두 무엇인지 알고 싶습니다. 웹 응용 프로그램 (블로그, 포럼 또는 동적 웹 페이지)을 만드는 모든 과정이 내게 명확하지 않습니다 .-) – mono

+0

약간 큰 예제가 여기에 있습니다. http://lukeplant.me.uk/blog/posts/ella/ – Long

+0

@PA. lighttpd에서 나는 [. ...] ".pl"=> "/ usr/bin/perl", "[...]'에 대해 다음을 수행 할 필요가 있지만 .hs 파일을 위해 어떤 실행 파일을 설정해야합니까? –

관련 문제