2013-02-08 1 views
7

나는 놀이에 초보자입니다! 웹 프레임 워크를 이해하고 작동 원리를 이해하고 다른 웹 프레임 워크와 비교하는 방법을 배우기 위해 Play! 소스 코드, 시작부터 끝까지 요청주기. Play!의 스칼라 구현을 사용합니다.Play!의 요청주기 이해? 응용 프로그램

대부분의 경험이 PHP 프레임 워크에서 이루어 졌기 때문에 웹 루트 디렉토리에서 index.php 파일을 시작하고 포함 된 config/bootstrapping 스크립트, 종속성 주입 처리, 요청 라우팅, 작업을 읽는 데 익숙합니다. 디스패치, 그리고 마지막으로보기/응답 렌더링.

스칼라/플레이에 대해 비슷한 입장 지점을 확인할 수 없었습니다! 응용 프로그램, 그리고 나는 대단히 올바른 방향으로 추진력을 주셔서 감사합니다. 요청 수명주기의 관람은 물론 관대 할 것입니다.하지만 실제로 필요한 것은 진입 점이 표시되는 것입니다.

답변

3

기본적으로 Play Framework는 기본 제공 HTTP 서버 (Netty 기준)를 사용합니다. 그래서 PHP와 가장 유사한 유추는 Play가 Apache와 PHP가 될 것입니다.

PHP는 기존의 'CGI와 같은'패러다임을 사용합니다. 하나의 HTTP 요청을 처리하기 위해 프로그램이 시작되고 요청 처리가 끝난 후 종료됩니다. HTTP 요청을 제공하는 CGI에서 웹 서버는 외부 프로그램 (스크립트)을 시작하고 출력을 반환합니다. 이전 버전의 PHP는 CGI 용으로 만 설계되었으며 이후 버전에서는 서버와 상호 작용할 수있는 다른 방법이 있습니다. CGI는 매우 느리지 만 핵심 원칙은 동일하게 유지됩니다.

대부분의 웹 응용 기술은 다른 접근법을 사용합니다. 웹 응용 프로그램이 한 번 시작된 다음 실행 중이므로 하나의 실행중인 웹 응용 프로그램 인스턴스가 계속 요청을 처리하고 여러 개의 요청을 동시에 처리 할 수 ​​있습니다. PHP처럼 하나의 요청을 처리 한 후에도 죽지 않습니다. 이것은 숨겨진 내부 프레임 워크에서 요청 처리가 대부분 이루어지고 앱이 요청 도착 및 반환시 호출되는 컨트롤러 메소드를 노출하기 만하면되므로 매번 애플리케이션을 시작하는 데 필요한 자원을 훨씬 적게 소비 할 수 있습니다. 응답.

또한 웹 서버 내부에서 바로 백그라운드 처리를 시작할 수 있으므로 외부 서버 프로세스가 필요하지 않습니다. Play에는 매우 편리한 Akka 라이브러리가 있습니다.

웹 애플리케이션이 매번 중량급 웹 페이지를 제공하는 대신 Ajax 및 REST 접근 방식을 사용함에 따라 점점 더 중요 해지고 있습니다. 또한 요청 기술 (폴링, 긴 폴링, 다중 파트 iframe)에 관계없이 성능이 좋은 PHP를 사용하여 실시간 메시징 백엔드를 만드는 것은 거의 불가능합니다.

그러나보기, 모델 및 컨트롤러를 만드는 개발자의 관점에서 보면 PHP MVC 프레임 워크와 비교하면 Play가 매우 유사합니다. PHP MVC 프레임 워크와 Play 프레임 워크 모두 컨트롤러 메소드 또는 함수를 호출하며이 메소드는 응답을 반환해야하며, 뷰는 일반적으로 템플릿이며 모델은 일반적으로 관계형 데이터베이스에 대한 ORM 바인딩입니다.

1

재생은 템플리트 지원이 있지만 요청 수명주기 개념이있는 jsp jsf 등과 같은 일반적인 템플리트 기반 프레임 워크가 아닌 편안한 프레임 워크 (http://en.wikipedia.org/wiki/Representational_state_transfer 읽기)입니다. 기본 개념은 json과 같은 순수한 데이터를 기반으로하는 서버와의 상호 작용을 가지고 있으며 DOM 구조 업데이트를위한 대부분의 코드는 자바 스크립트로 작성되었으며 실제로는 더 유연하고 훨씬 간단하고 효율적입니다.

놀랍게도 스칼라 클래스에 메서드를 정의하고 경로 파일에 매핑하여 브라우저에 데이터를 보내기위한 메서드를 간단하게 만듭니다. 또한 일반적인 웹 개발 프로세스 에서처럼 공용 리소스 폴더에 html 파일을 저장하거나 (또는 ​​템플릿을 작성) 브라우저에서 실행될 때 일반적으로 해당 메소드에 대한 ajax 호출을 수행합니다.

2

나는 이것이 무슨 뜻 파일 생각 :

https://github.com/playframework/playframework/blob/master/framework/src/play-netty-server/src/main/scala/play/core/server/NettyServer.scala

플레이가 특정 포트에서 수신 대기 시작하는 Java 응용 프로그램입니다. Listening은 네트워크 프로토콜 (가장 중요한 HTTP)의 다른 유형을 이해하는 Netty 라이브러리를 사용하여 수행됩니다. Netty는 무슨 일이 일어나고 있는지 알고 나면 Play 프레임 워크를 제어하게됩니다.

그러면 Play Framework는 라우트와 함께 글로벌 파일을 사용하여 호출 할 액션을 결정합니다.

+0

는 이제 위의 링크는 https://github.com/playframework/playframework/blob/master/framework/src/play-netty-server/src/main/scala/play/core/server 다음으로 이동 /NettyServer.scala – hiren

+0

@hiren 감사합니다. 링크를 업데이트했습니다. – EECOLOR

관련 문제