2010-06-23 43 views
17

有一個demo by IBM,它顯示了反向AJAX如何與DWR 2一起使用。另一方面,Scala/LIFT帶有內置的反向AJAX功能。反向AJAX(Comet)和Spring MVC與Scala/LIFT?

  1. 問題:如果Spring MVC能正常工作,有什麼經驗嗎?

  2. 問題:如果你從頭開始,什麼都超過DWR/Spring MVC的

  3. 問題寧願斯卡拉/ LIFT利弊:在斯卡拉/升降機,是安全處理的那樣複雜在春季安全?

回答

11

提起的這是由Novell公司選定後,他們評估了許多不同的技術對他們的脈衝產品電源彗星架構。

Lift的Comet實現使用單個HTTP連接來輪詢頁面上任意數量組件的更改。每個組件都有一個版本號。長輪詢包括版本號和組件GUID。在服務器端,監聽器被附加到長輪詢請求中列出的所有GUID。如果任何組件的版本號較高(或者在長期輪詢期間版本號增加),則deltas(描述每個版本的更改的一組JavaScript)將發送到客戶端。將應用增量值,並將客戶端上的版本號設置爲更改集的最高版本號。

Lift將長輪詢與會話管理集成在一起,以便如果在長輪詢期間請求進入相同的URL(會導致連接不足),則終止長輪詢以避免連接不足(某些瀏覽器最多具有2個HTTP連接每個命名服務器,其他人最多可以有6個)。 Lift還支持長期輪詢請求的DNS通配服務器,這樣瀏覽器中的每個選項卡都可以針對不同的DNS通配服務器進行長時間輪詢。這可以避免連接不足問題。

Lift可動態檢測Servlet在Jetty 6上運行的容器以及(很快)Glassfish,Lift將使用平臺的「continuations」實現來避免在長期輪詢期間使用線程。

Lift的JavaScript可以位於jQuery和YUI之上(也可以位於Prototype/Scriptaculous之上)。實際的輪詢代碼包括連接失敗的退避和處理瞬態連接的其他「優雅」方式故障。

我看過Atmosphere,CometD,Akka(所有面向JVM的Comet技術)。沒有(當時我評估它們)支持每頁多個組件或避免連接匱乏。

Novell從頭開始並選擇了Lift來驅動Pulse,原因很多。

在安全性方面,Lift + Beats Spring + Spring安全。請參閱http://www.mail-archive.com/[email protected]/msg13020.html

基本上,Lift的安全性已烘焙到您的應用程序中。提升應用默認情況下可抵抗常見問題(跨站點腳本,重播攻擊,跨站點請求僞造)。提升應用程序默認情況下可抵抗參數篡改。 Lift的站點地圖定義站點導航和訪問控制規則。這意味着你永遠不會有人無法點擊的鏈接。您不需要有一個外部過濾器(例如Spring Security),您必須獨立於您的應用程序進行配置(whoops ...移動了頁面,但忘記確保Spring Security 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

嘿大衛,謝謝你的非常有用的答案。我已經有了一種感覺,除了Lift之外別無選擇,現在我知道這個假設是正確的。 因此...斯卡拉...我學習的另一種語言... :-( – 2010-06-29 01:24:19

+0

期待您在Lift Google Group上看到您http://groups.google.com/group/liftweb – 2010-06-29 02:21:03

2
  1. 從我的角度來看,Spring MVC的是一個非常不錯的選擇建立AJAXed/COMETed RIA。 ModelAndView組件旨在使用HTML表單並一次渲染整個頁面,標記庫,驗證例程都更適合基於JSP和模板的老式開發。對我來說,將AJAX/COMET插入Spring MVC將永遠是一種破解。然而,如果你打算使用@MVC構建RESTful服務(與你的JavaScript UI交換JSON),它可能會起作用(儘管我更喜歡Jersey/JAXB)。
  2. LIFT最初設計與COMET一起工作,所以它將是一個更好的選擇。雖然我會選擇比LIFT更輕巧,更無模板的東西(對我來說,它受到Spring MVC同樣的疾病的影響)。
  3. 這兩個安全系統僅涵蓋基本情景,並且需要大量的定製才能用於真實世界的項目。

    這就是我將用於構建COMETed RIA在斯卡拉:

    • Jersey(輕量級REST的服務與JS UI溝通過HTTP/JSON)+ Atmosphere(用於構建COMETed應用提供可擴展的解決方案)+任何JS框架(jQuery,YUI,分機js,...)。您還應該看看Akka Framework,它與Jersey和Atmosphere都集成在一起,並允許您在慣用的Scala中構建RIA Web應用程序。這是Akka的pub-sub COMET example
    • Vaadin + ICEPush。如果你不想用JS弄髒你的手(儘管ICEpush還不是企業就緒的解決方案),它將會非常舒適。
0

另一種選擇,純Java(或包括Scala在內的任何其他JVM語言)爲中心是ItsNat Comet