2012-03-19 11 views
5

यह एक प्रश्न है जिसमें एकल पृष्ठ वेब ऐप्स शामिल हैं और मेरा प्रश्न बोल्ड में है।सिंगल पेज एप्लिकेशन, http या websockets, कनेक्ट/एक्सप्रेस के लिए किया गया है?

चेतावनी: मैं इस विषय पर शायद ही कोई विशेषज्ञ हूं और कृपया मुझे सही करें अगर मैं समझता हूं कि मैं समझता हूं कि HTTP और वेबसाकेट कैसे काम करते हैं।

HTTP समझने वाले एपीआई कैसे काम करते हैं, इसकी मेरी समझ यह है कि वे स्टेटलेस हैं। हम उच्च स्तर पर हमारे ऐप्स में कुछ प्रकार के राज्य को इंजेक्ट करने के लिए connect.session() जैसे टूल का उपयोग करते हैं। चूंकि प्रत्येक एकल अनुरोध नया है, इसलिए हमें सर्वर पर स्वयं को फिर से पहचानने का एक तरीका चाहिए, इसलिए हम एक अद्वितीय टोकन बनाते हैं जो आगे और आगे भेजता है।

कनेक्ट का सत्र मिडलवेयर यह हमारे लिए एक बहुत अच्छे तरीके से हल करता है। इसे अपने मिडलवेयर स्टैक में छोड़ दें और आपके पास अपने पूरे एप्लिकेशन के लिए प्रत्येक अनुरोध से जुड़े भयानक सॉस सत्र हैं। कुछ हैंडशेकिंग में छिड़काव करें और आप उस सत्र की जानकारी socket.io को काफी आसानी से, और भी भयानक कर सकते हैं। अपने कनेक्ट/एक्सप्रेस ऐप से इसे हटाने के लिए जानकारी रखने के लिए RedisStore का उपयोग करें और यह और भी शानदार है। हम यहाँ डबल इंद्रधनुष भयानक बात कर रहे हैं।

तो फिलहाल आप सिद्धांत में एक पृष्ठ का आवेदन कर सकते हैं जो कनेक्ट/सत्रों पर निर्भर नहीं है क्योंकि वेबसाइकिल से निपटने के लिए आपको 1 से अधिक सत्र (प्रारंभिक हैंडशेक) की आवश्यकता नहीं है। socket.io पहले से ही आपको इस सत्र में आसान पहुंच प्रदान करता है आईडी, समस्या हल हो गई।


इस प्रमाणीकरण कार्य प्रवाह के बजाय

:

  1. ईमेल और पासवर्ड एक पोस्ट अनुरोध से प्राप्त करें।
  2. अपना पासवर्ड हैश प्राप्त करने के लिए ईमेल द्वारा अपनी पसंद के डीबी पूछें।
  3. हैश की तुलना करें।
  4. "ठीक है!" पर रीडायरेक्ट करें या "नहीं!"।
  5. यदि ठीक है, तो सत्र जानकारी संग्रहीत करें और connect.session() को अधिकांश भाग के लिए बाकी को संभालने दें।

अब यह हो जाता है:

  1. लॉगिन ईवेंट के लिए सुनो।
  2. ईवेंट कॉलबैक से ईमेल और पासवर्ड प्राप्त करें।
  3. ईमेल द्वारा अपनी पसंद के डीबी पूछें और अपना पासवर्ड हैश प्राप्त करें।
  4. हैश की तुलना करें।
  5. एमिट एक "ठीक है!" या "नहीं!" घटना।
  6. यदि ठीक है, तो कुछ सामान करें जो मैं अभी नहीं सोच रहा हूं लेकिन एक ही प्रभाव संभव होना चाहिए?

और क्या हम कनेक्ट का उपयोग करके से लाभ हो?यहाँ मैं आमतौर पर क्या उपयोग की एक सूची है:, के समान

  • देव मोड के लिए लकड़हारा
  • फ़ेविकॉन
  • bodyparser
  • स्थिर सर्वर
  • पासपोर्ट (एक प्रमाणीकरण पुस्तकालय कि कनेक्ट/व्यक्त पर निर्भर करता है क्या हरउथ ऑफ़र)

प्रारंभिक एकल पृष्ठ ऐप लोड करने वाला कोड एक स्थिर सर्वर और फेविकॉन सेट करने में संभाल करेगा। पासपोर्ट की तरह कुछ लागू करने के लिए और अधिक मुश्किल हो सकता है लेकिन निश्चित रूप से असंभव नहीं है। जो कुछ भी मैंने सूचीबद्ध किया है, इससे कोई फर्क नहीं पड़ता, आप आसानी से websockets के लिए अपने स्वयं के डीबग लॉगर को कार्यान्वित कर सकते हैं।

अभी वास्तव में हमें एक ही http आधारित index.html फ़ाइल रखने से रोकने के लिए कुछ भी है जो वेबसाइकिल कनेक्शन को समाहित करता है और बिल्कुल कनेक्ट पर निर्भर नहीं करता है? क्या सॉकेट.io वास्तव में उस प्रकार के एप्लिकेशन आर्किटेक्चर को अपने स्वयं के HTTP आरामपूर्ण एपीआई सेट किए बिना काम कर सकता है यदि आप अपने ऑटो-जादुई फ़ॉलबैक के माध्यम से क्रॉस ब्रोवर समर्थन की पेशकश करते हुए एक पृष्ठ ऐप चाहते थे?

इस बिंदु पर एकमात्र असली नकारात्मकता क्लाइंट पर कैशिंग परिणाम सही है? क्या आप इसके लिए स्थानीय भंडारण शामिल नहीं कर सके? मुझे लगता है कि खोज इंजन के लिए अनुक्रमणीय/क्रॉल करने योग्य सामग्री पृष्ठ बनाना एक सौदा का बड़ा नहीं होगा - आप मूल रूप से एक ऐसा टूल तैयार करेंगे जो आपके सतत डेटाबेस से स्थिर HTML फ़ाइलों को सही बनाता है?

उत्तर

0

मुझे लगता है कि आप जो पूछ रहे हैं वह यह है कि यदि यह गतिशील रूप से बदलती सामग्री वाला एक स्थिर पृष्ठ है, तो ऐसी वेबसाइट बनाने के लिए यह संभव है (सॉकेट.io का उपयोग करके)।

उत्तर "हां" है, यह काम कर सकता है। कई node.js वेब ढांचे पहले से ही ऐसा करते हैं हालांकि मुझे सॉकेट.io का उपयोग करने वाले किसी भी व्यक्ति के बारे में पता नहीं है।

संबंधित मुद्दे

 संबंधित मुद्दे