2010-06-23 4 views
17

역방향 AJAX를 DWR 2에서 얼마나 쉽게 사용할 수 있는지 보여주는 demo by IBM이 있습니다. 반면에 Scala/LIFT는 Reverse AJAX 기능이 내장되어 있습니다.AJAX (혜성)와 Spring MVC 대 스칼라/LIFT를 뒤집습니까?

  1. 질문 : 스프링 MVC에서 제대로 작동하면 어떤 경험이 있습니까?

  2. 질문 : 당신은 처음부터 다시 시작하려는 경우, DWR/봄 MVC

  3. 질문을 통해 스칼라/LIFT를 선호에 대한 장점과 단점은 무엇인가 : 스칼라/LIFT에서만큼 정교한 핸들링 보안이 스프링 보안에서?

    내 관점에서

답변

11

서로 다른 기술들을 평가 한 후 자신의 펄스 제품에 전원을 노벨에 의해 선정되었다 리프트의 혜성 아키텍처.

Lift 's Comet 구현은 단일 HTTP 연결을 사용하여 페이지의 임의의 수의 구성 요소에 대한 변경 사항을 폴링합니다. 각 구성 요소에는 버전 번호가 있습니다. 긴 폴링에는 버전 번호와 구성 요소 GUID가 포함됩니다. 서버 측에서는 긴 폴링 요청에 나열된 모든 GUID에 리스너가 연결됩니다. 구성 요소 중 더 높은 버전 번호가 있거나 긴 폴링 기간 동안 버전 번호가 증가하면 deltas (각 버전의 변경 사항을 설명하는 JavaScript 세트)가 클라이언트로 전송됩니다. 델타가 적용되고 클라이언트의 버전 번호가 변경 세트의 가장 높은 버전 번호로 설정됩니다.

Lift는 긴 폴링을 세션 관리와 통합하므로 연결이 끊어지는 것을 유발할 수있는 긴 폴링 중에 요청이 동일한 URL에 오면 긴 폴링이 종료되어 연결 기아가 발생하지 않습니다 (일부 브라우저의 경우 최대 2 개의 HTTP 연결이 있음) 명명 된 서버 당 최대 6 개). 또한 Lift는 긴 폴링 요청에 대해 DNS 와일드 카드 서버를 지원하므로 브라우저의 각 탭에서 다른 DNS 와일드 카드 서버에 대해 긴 폴링을 수행 할 수 있습니다. 이렇게하면 연결 기아 문제를 피할 수 있습니다.

리프트는 서블릿이 실행중인 컨테이너와 Jetty 6 & 7 (그리고 곧) 글래스 피쉬를 동적으로 감지합니다. Lift는 긴 폴링 중에 스레드 사용을 피하기 위해 플랫폼의 "계속"구현을 사용합니다.

리프트의 자바 스크립트는 jQuery와 YUI 위에 놓일 수 있습니다. 또한 실제 폴링 코드에는 연결 실패에 대한 백 오프와 기타 일시적인 연결을 처리하는 "우아한"방법이 포함됩니다 실패.

저는 Atmosphere, CometD, Akka (모든 JVM 지향 코멧 기술)을 살펴 보았습니다. 아무도 페이지 평가 나 연결 기아 회피를 피할 수 없었습니다.

노벨은 아주 좋은 이유로 펄스를 강화하기 위해 리프트를 선택했습니다.

보안 측면에서 Lift는 Spring + Spring Security 손을 아래쪽으로 친다. http://www.mail-archive.com/[email protected]/msg13020.html

기본적으로 Lift의 보안은 응용 프로그램에 구워집니다. 리프트 앱은 기본적으로 교차 사이트 스크립팅, 재생 공격, 교차 사이트 요청 위조와 같은 일반적인 문제에 강합니다. 리프트 앱은 기본적으로 매개 변수 변조에 강합니다. Lift의 사이트 맵은 사이트 탐색 및 액세스 제어 규칙을 정의합니다. 이것은 누군가가 클릭 할 수없는 링크가 없다는 것을 의미합니다. 앱과는 별도로 구성해야하는 외부 필터 (예 : 스프링 보안)가 필요하지는 않습니다. 페이지를 이동했지만 스프링 보안 XML 파일이 업데이트되었는지 잊어 버렸습니다.

아 ... 그리고 당신이 템플릿 언어를 사용하지 않으려면, 여기에 완전한 리프트 혜성 채팅 구성 요소의 :

class Chat extends CometActor with CometListener { 
    private var msgs: List[String] = Nil 

    def registerWith = ChatServer 

    override def lowPriority = { 
    case m: List[String] => msgs = m; reRender(false) 
    } 

    def render = { 
    <div> 
    <ul> 
    { 
     msgs.reverse.map(m => <li>{m}</li>) 
    } 
    </ul> 
    <lift:form> 
    { 
     SHtml.text("", s => ChatServer ! s) 
    } 
    <input type="submit" value="Chat"/> 
    </lift:form> 
    </div> 
    } 
} 

그리고 페이지에이를 삽입 : <lift:comet type="Chat"/>

+1

안녕하세요, David, 매우 유용한 답변에 감사드립니다. 나는 리프트에 대한 대안이 없다는 인상을 이미 받았고, 이제 나는이 가정이 옳았다는 것을 안다. 그래서 ... 스칼라 ... 배울 다른 언어 :-( –

+0

리프트 Google 그룹 http://groups.google.com/group/liftweb에서 만나실 수 있기를 기대합니다. –

2
  1. 는 스프링 MVC는 AJAXed/COMETed RIA를 구축하는 아주 나쁜 선택이 될 것입니다. ModelAndView 구성 요소는 HTML 양식을 사용하고 전체 페이지를 한 번에 렌더링하고, 라이브러리에 태그를 지정하며, JSP 및 템플릿을 기반으로하는 구식 개발에 적합합니다. 나에게 AJAX/COMET을 Spring MVC에 연결하는 것은 항상 일종의 해킹 일 것이다. 그러나 @MVC (JSON을 자바 스크립트 UI와 상호 교환 함)를 사용하여 RESTful 서비스를 작성하려는 경우 작동 할 수 있습니다 (이러한 문제에 대해서는 저지/JAXB를 선호하지만).
  2. LIFT는 원래 COMET에서 작동하도록 설계되었으므로 더 나은 선택이 될 것입니다. LIFT보다 훨씬 가볍고 템플리트가 적은 것을 선택 하겠지만 (나에게는 Spring MVC와 같은 질병으로 고통 받는다.)
  3. 두 보안 시스템 모두 기본 시나리오만을 다루며 실제 프로젝트에서 많은 사용자 정의가 필요합니다. 내가 스칼라에서 COMETed RIA 구축에 사용하는 것이 무엇

    :

    • Jersey (경량 편안하고 서비스를 JS UI와 통신하기 위해 HTTP/JSON 이상) + Atmosphere (COMETed 애플리케이션을 구축하기위한 확장 가능한 솔루션을) + 어떤 JS 프레임 워크 (jquery, YUI, ext js, ...). Jersey와 Atmosphere와 통합 된 Akka Framework을 살펴보고 관용적 인 Scala에서 RIA 웹 앱을 제작할 수 있습니다. Akka에 pub-sub COMET example이 있습니다.
    • Vaadin + ICEPush. JS로 손을 더럽 히고 싶지 않다면 (ICEpush는 아직 기업용 솔루션이 아니지만) 매우 편안하게 조합 될 것입니다.
0

또 다른 대안, 순수 Java (또는 Scala를 포함한 다른 JVM 언어) 중심은 ItsNat Comet입니다.