프로그래밍 언어로 동적 웹 사이트를 만드는 경우를 생각해 봅시다.
사용자가 귀하의 사이트를 방문하면 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 스택은 대부분의 경우 거의 비슷합니다.
나는 공격적이지는 않지만 인터넷에서 반복해서 쓰여졌습니다. 하스켈이나 서버를 만드는 방법에 대해 알고 싶습니까? –
아니, 나는 모든 mod_somthing http 서버와 프로그래밍 언어가 어떻게 작동하는지 explantion을 원하십니까? 그들은 모두 어떻게 연결되어 있습니다 :-) – mono
moshe : 귀하의 질문은 매우 광범위하며 다양한 방법으로 대답 할 수 있습니다. 예를 들어 mod_php와 mod_python 모듈은 * Apache * 확장 모듈이므로 Apache 스택과 함께 작동합니다. 내가 아는 mod_haskell은 없다. CGI의 성능 특성은 작업하는 언어에 따라 매우 다를 수 있지만 모든 웹 서버 (Apache 포함)는 CGI (Common Gateway Interface)를 지원합니다. 이는 CGI의 또 다른 방법입니다. 즉, 유용한 대답을 얻으려면 질문을 하나의 언어 또는 하나의 웹 서버로 제한해야합니다. –