서로 다른 기술들을 평가 한 후 자신의 펄스 제품에 전원을 노벨에 의해 선정되었다 리프트의 혜성 아키텍처.
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"/>
안녕하세요, David, 매우 유용한 답변에 감사드립니다. 나는 리프트에 대한 대안이 없다는 인상을 이미 받았고, 이제 나는이 가정이 옳았다는 것을 안다. 그래서 ... 스칼라 ... 배울 다른 언어 :-( –
리프트 Google 그룹 http://groups.google.com/group/liftweb에서 만나실 수 있기를 기대합니다. –