WSGI 또는 CGI를 읽을 때마다 나는 움찔합니다. 나는 전에 그것을 읽으려고 시도했지만 실제로 아무것도 붙어 있지 않습니다.
정말 평범한 영어로 무엇입니까?
요청을 터미널로 파이프하고 출력을 리디렉션합니까?
답변
WSGI는 웹 서버 프로세스의 일부 (임베디드 모드) 또는 별도의 프로세스 (데몬 모드)로 웹 서버 시작시 Python 인터프리터를 실행하고 스크립트를로드합니다. 각 요청은 호출되는 스크립트의 특정 함수를 생성하며 요청 환경은 함수에 인수로 전달됩니다.
CGI는 각 요청마다 별도의 프로세스로 스크립트를 실행하고 환경 변수, stdin 및 stdout을 사용하여 “통신”합니다.
답변
완전히 뒤로 물러 난 관점 인 Blankman에서 웹 서비스 게이트웨이 인터페이스에 대한 “소개 페이지”가 있습니다.
1 부 : 웹 서버
웹 서버는 응답을 제공합니다. 그들은 주위에 앉아 참을성있게 기다렸다가 전혀 경고없이 갑자기 :
- 클라이언트 프로세스가 요청을 보냅니다. 클라이언트 프로세스는 웹 서버, 봇, 모바일 앱 등이 될 수 있습니다. 단순히 “클라이언트”입니다.
- 웹 서버는이 요청을받습니다.
- 고의적으로 중얼 거리다 다양한 일이 일어난다 (아래 참조)
- 웹 서버는 클라이언트에게 무언가를 다시 보냅니다.
- 웹 서버는 다시 주위에 앉아
웹 서버 (적어도 더 나은 것)는 이것에 매우 뛰어납니다. 그들은 수요에 따라 처리를 확장 및 축소하고, 정말 복잡한 네트워크를 통해 가장 약한 클라이언트와 안정적으로 대화를 나누며 우리는 그것에 대해 걱정할 필요가 없습니다. 그들은 계속 봉사합니다.
이것이 제 요점입니다. 웹 서버는 바로 서버입니다. 그들은 콘텐츠에 대해, 사용자에 대해 전혀 알지 못하며 실제로 많이 기다렸다가 안정적으로 응답하는 방법 외에는 아무것도 모릅니다.
선택한 웹 서버는 소프트웨어가 아닌 제공 선호도를 반영해야합니다. 웹 서버는 처리 또는 논리적 작업이 아닌 서비스를 담당해야합니다.
파트 2 : (PYTHON) 소프트웨어
소프트웨어는 주위에 앉아 있지 않습니다. 소프트웨어는 실행 시간에만 존재합니다. 소프트웨어는 환경에서 예기치 않은 변화 (파일이 예상 한 위치에 있지 않음, 매개 변수 이름이 변경되는 등)에 관해서는별로 수용하지 않습니다. 물론 최적화가 디자인의 중심 원칙이되어야하지만 소프트웨어 자체는 최적화되지 않습니다. 개발자는 최적화합니다. 소프트웨어가 실행됩니다. 소프트웨어는 위의 ‘고의적 인 중얼 거림’섹션의 모든 작업을 수행합니다. 무엇이든 될 수 있습니다.
소프트웨어 선택 또는 디자인은 웹 서버 선택이 아닌 응용 프로그램, 선택한 기능을 반영해야합니다.
이것은 웹 서버로 언어를 “컴파일하는”전통적인 방법이 고통스러운 곳입니다. 결국에는 실제 서버 환경에 대처하기 위해 애플리케이션에 코드를 넣거나 적어도 런타임에 포함 할 적절한 ‘래퍼’라이브러리를 선택하여 웹 서버 전반에 걸쳐 균일 성을 제공해야합니다.
그렇다면 WSGI 란 무엇입니까?
그래서 마침내 WSGI는 무엇입니까? WSGI는 두 부분으로 작성된 일련의 규칙 입니다. 통합을 환영하는 모든 환경에 통합 될 수 있도록 작성되었습니다.
웹 서버 측용으로 작성된 첫 번째 부분은 “좋아, WSGI 응용 프로그램을 다루고 싶다면 소프트웨어가로드 될 때 어떻게 생각할 것인지에 대해 설명합니다. 응용 프로그램에서 사용할 수 있도록해야 할 사항은 다음과 같습니다. 모든 애플리케이션이 가질 것으로 기대할 수있는 인터페이스 (레이아웃)입니다. 또한 문제가 발생하는 경우 앱이 어떻게 생각하고 어떻게 작동 할지를 예상 할 수 있습니다. “
Python 응용 프로그램 소프트웨어 용으로 작성된 두 번째 부분은 “좋아, WSGI 서버를 다루고 싶다면 서버가 사용자에게 연락 할 때 어떻게 생각할 것인지에 대해 설명합니다. 서버에서 사용할 수 있도록해야 할 사항은 다음과 같습니다. 여기에 모든 서버가 가질 것으로 예상 할 수있는 인터페이스 (레이아웃)가 있습니다. 또한 문제가 발생하면 행동해야하는 방법과 서버에 알려야하는 내용이 있습니다. “
그래서 당신은 그것을 가지고 있습니다-서버는 서버가 될 것이고 소프트웨어는 소프트웨어가 될 것입니다. 그리고 여기에 다른 하나의 세부 사항을 허용하지 않고도 잘 지낼 수있는 방법이 있습니다. 이것은 WSGI입니다.
반면에 mod_wsgi는 WSGI 호환 소프트웨어와 통신 할 수 있도록하는 Apache 용 플러그인입니다. 즉, mod_wsgi는 위의 규칙 책 중 1 부 규칙의 구현 ( Apache에서)입니다.
CGI에 관해서는 …. 다른 사람에게 물어보십시오 🙂
답변
이 공간의 모든 용어에 대해 명확하지 않은 경우, 혼동되는 두문자어가 포함 된 용어이며 CGI 대 FastCGI 대 WSGI 등을 논의 하는 공식 Python HOWTO 형식의 좋은 배경 독자도 있습니다. 의 위에. 먼저 읽어보고 싶습니다.
답변
CGI와 WSGI는 모두 프로그램이 웹 요청을 처리하는 데 사용할 수있는 표준 인터페이스를 정의합니다. CGI 인터페이스는 WSGI보다 낮은 수준에 있으며 HTTP 요청의 데이터를 포함하는 환경 변수를 설정하는 서버가 포함되며 프로그램은 베어 HTTP 서버 응답과 매우 유사한 형식을 반환합니다.
반면 WSGI는 프로그래머가 서버에 구애받지 않고 다른 WSGI 응용 프로그램 (미들웨어)에 래핑 할 수있는 응용 프로그램을 작성할 수 있도록하는 Python 전용의 약간 더 높은 수준의 인터페이스입니다.