लिफ्ट धूमकेतु वास्तुकला जो नोवेल द्वारा चयनित किया गया था उनकी पल्स उत्पाद बिजली के बाद वे विभिन्न प्रौद्योगिकियों के एक नंबर का मूल्यांकन किया।
लिफ्ट धूमकेतु कार्यान्वयन के लिए एक एकल HTTP कनेक्शन का उपयोग करता है पृष्ठ पर घटकों के एक मनमाना संख्या में परिवर्तन के लिए मतदान पर। प्रत्येक घटक में संस्करण संख्या होती है। लंबे मतदान में संस्करण संख्या और घटक GUID शामिल है। सर्वर की ओर, एक श्रोता लंबे मतदान अनुरोधों में सूचीबद्ध सभी GUID से जुड़ा हुआ है। घटकों में से किसी एक उच्च संस्करण संख्या (या लंबे समय तक चुनाव की अवधि के दौरान संस्करण संख्या बढ़ जाती है), डेल्टा (जावास्क्रिप्ट का एक सेट प्रत्येक संस्करण से परिवर्तन का वर्णन) है, तो ग्राहक के लिए भेजा जाता है। डेल्टा लागू होते हैं और क्लाइंट पर संस्करण संख्या परिवर्तन सेट के लिए उच्चतम संस्करण संख्या पर सेट की जाती है।
लिफ्ट सत्र प्रबंधन के साथ लंबे मतदान को एकीकृत करता है ताकि यदि एक लंबे मतदान के दौरान एक अनुरोध यूआरएल में आता है जो कनेक्शन भुखमरी का कारण बनता है, तो लंबे समय तक मतदान कनेक्शन भुखमरी से बचने के लिए समाप्त हो जाता है (कुछ ब्राउज़रों में अधिकतम 2 HTTP कनेक्शन होते हैं प्रति नामित सर्वर, दूसरों के पास अधिकतम 6 है)। लिफ्ट लंबे मतदान अनुरोधों के लिए DNS जंगली-कार्ड वाले सर्वर का भी समर्थन करता है जैसे ब्राउज़र में प्रत्येक टैब एक अलग DNS वाइल्डकार्ड सर्वर के खिलाफ लंबे मतदान कर सकता है। यह कनेक्शन भुखमरी के मुद्दों से बचाता है।
लिफ्ट गतिशील रूप से कंटेनर का पता लगाता है कि सर्लेट चल रहा है और जेटी 6 & 7 और (जल्द ही) ग्लासफ़िश, लिफ्ट लंबे मतदान के दौरान धागे का उपयोग करने से बचने के लिए प्लेटफॉर्म के "निरंतरता" कार्यान्वयन का उपयोग करेगा।
लिफ्ट की जावास्क्रिप्ट jQuery और वाईयूआई के शीर्ष पर बैठ सकती है (और प्रोटोटाइप/स्क्रिप्टैकियस के शीर्ष पर भी बैठ सकती है।) वास्तविक मतदान कोड में कनेक्शन असफलताओं और क्षणिक कनेक्शन से निपटने के अन्य "सुंदर" तरीकों पर बैक-ऑफ शामिल है विफलताओं।
मैंने वायुमंडल, धूमकेतु, अक्का (सभी जेवीएम उन्मुख धूमकेतु प्रौद्योगिकियों) को देखा है। कोई भी पृष्ठ (उस समय मैंने उनका मूल्यांकन किया) प्रति पृष्ठ या कनेक्शन भुखमरी से बचने के लिए कई घटकों के लिए समर्थन।
नोवेल खरोंच से शुरू हुआ और कुछ अच्छे कारणों से पल्स को सत्ता में लेफ्ट चुना।
सुरक्षा के मामले में, लिफ्ट वसंत + वसंत सुरक्षा हाथों को धड़कता है। http://www.mail-archive.com/[email protected]/msg13020.html
असल में, लिफ्ट की सुरक्षा आपके आवेदन में बेक गई है। लिफ़्ट एप्स डिफ़ॉल्ट रूप से सामान्य समस्याओं (क्रॉस साइट स्क्रिप्टिंग, रीप्ले हमलों, क्रॉस साइट अनुरोध फर्जीज) के प्रतिरोधी हैं। लिफ्ट ऐप्स डिफ़ॉल्ट रूप से पैरामीटर छेड़छाड़ करने के लिए प्रतिरोधी हैं। लिफ्ट का साइटमैप साइट नेविगेशन और एक्सेस कंट्रोल नियमों को परिभाषित करता है। इसका मतलब है कि आपके पास कभी ऐसा लिंक नहीं है जिसे कोई भी क्लिक न कर सके। आपको बाहरी फ़िल्टर (उदाहरण के लिए, स्प्रिंग सिक्योरिटी) की आवश्यकता नहीं है जिसे आपको स्वतंत्र रूप से आपके ऐप से कॉन्फ़िगर करना होगा (जोप्स ... ने एक पृष्ठ ले जाया है, लेकिन यह सुनिश्चित करना भूल गया कि स्प्रिंग सिक्योरिटी एक्सएमएल फ़ाइल अपडेट की गई थी।)
ओह ... और आप एक templating भाषा का उपयोग नहीं करना चाहते हैं, तो यहाँ एक पूरी लिफ्ट धूमकेतु चैट घटक है:
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"/>
हे डेविड, बहुत उपयोगी उत्तर के लिए धन्यवाद। मुझे पहले से ही यह धारणा थी कि लिफ्ट के लिए कोई विकल्प नहीं है, और अब मुझे पता है कि यह धारणा सही थी। तो ... स्कैला ... मेरे लिए सीखने के लिए एक और भाषा ... :-( –
आपको लिफ्ट Google समूह http://groups.google.com/group/liftweb पर देखने के लिए तत्पर हैं –