2014-07-05 8 views
63

मैं अपने सिर को लपेटने की कोशिश कर रहा हूं कि कैसे Electron (पूर्व में एटम शैल) काम करता है।इलेक्ट्रॉन (एटम शैल) का उपयोग करते समय ग्राहक/सर्वर मॉडल क्या है?

मैं एक पारंपरिक, MVC शैली वेब अनुप्रयोग जहां एक ब्राउज़र एक रूटिंग सिस्टम के माध्यम से एक नियंत्रक कार्रवाई बुला रहा है से आ रहा हूँ, नियंत्रक तो डेटा एक दुकान (फाइल सिस्टम, डाटा बेस से, को हासिल करेगा। ..) और प्रस्तुत करता है, जिसे ब्राउज़र पर वापस भेजा जाता है। कुछ क्रियाएं जेएसओएन को इसके बजाय वापस भेज रही हैं, क्योंकि उन्हें वास्तव में ब्राउज़र पर नेविगेट करने के बजाय जावास्क्रिप्ट/AJAX के माध्यम से बुलाया जाता है।

मैं इसे बनाना चाहता हूं, लेकिन क्रॉस-प्लेटफ़ॉर्म डेस्कटॉप एप्लिकेशन के रूप में। मुझे पता है कि एटम शैल क्रोमियम-ब्राउज़र और एक नोड.जेएस/वी 8 रनटाइम दोनों को जोड़ती है, लेकिन मुझे यकीन नहीं है कि वे कैसे संवाद करेंगे।

मुझे लगता है कि मैं वेब सर्वर पर पूर्ण रूप से चला सकता हूं (मूल रूप से, कुछ नोड.जेएस HTTP मिडलवेयर जैसे Express), लेकिन यह नेटवर्क-पहुंच योग्य सर्वर बनाता है (जो फ़ायरवॉल भी चला सकता है) - मुझे कारणों में से एक कारण एक डेस्कटॉप ऐप बनाने के लिए एक असली सर्वर चलाने से बचने के लिए ठीक है। मूल रूप से "सामान्य" डेस्कटॉप ऐप में एमवीपी/एमवीवीएम पैटर्न की तरह।

क्या कोई मुझे कुछ शुरुआती बिंदु दे सकता है जो मैं करने की कोशिश कर रहा हूं? ब्राउजर नोड रनटाइम ("क्लाइंट" के रूप में इसे कॉल करने के लिए कैसे कहेंगे?) यह कहने के लिए "अरे, आईडी 12345 के साथ मेरा रिकॉर्ड लाएं" और क्लाइंट रिटर्न एचटीएमएल प्रदान करेगा, या ब्राउज़र को सिर्फ ब्लॉब मिलेगा JSON का बैक और इसे जावास्क्रिप्ट टेम्पलेटिंग इंजन के माध्यम से प्रस्तुत करें?

+0

बस एक ध्यान दें, यह बिल्कुल "गीथूब" एटम शैल नहीं है, कोड सिर्फ गिथब पर होस्ट किया गया है :) – apparatix

+16

@apparatix Atom गिटूब कंपनी द्वारा एक परियोजना है :) –

+1

महान सवाल। इस लिंक को इलेक्ट्रॉन प्रारंभ करने वाले पृष्ठ पर पोस्ट किया जाना चाहिए (यहां मैं एक साल बाद उस पर जमीन पर उतरने के बाद इसे वास्तव में जरूरी था ... आगे बढ़ना अच्छा होगा!) – jleach

उत्तर

62

इलेक्ट्रॉन वेब सर्वर के रूप में Node.js का उपयोग नहीं करता है, लेकिन केवल पृष्ठभूमि जावास्क्रिप्ट कोड चलाने के लिए एक वातावरण के रूप में, यह कोड सिस्टम तक पहुंचने के लिए नोड मॉड्यूल का उपयोग कर सकता है। साथ ही क्रोमियम ऐप के लिए एक यूजर इंटरफेस प्रदान करता है, यह नियमित वेब पेज प्रदर्शित करता है जो सामान्य सैंडबॉक्स वाली जावास्क्रिप्ट चलाते हैं। दोनों इलेक्ट्रॉन निष्पादन योग्य द्वारा एम्बेडेड किए जा रहे हैं, पूर्व सीधे (Node.js को स्थिर पुस्तकालय के रूप में बनाया जा सकता है), बाद में libchromiumcontent के माध्यम से। एक तरह से, Node.js एप्लिकेशन का नियंत्रक हिस्सा है जबकि क्रोमियम दृश्य है।

आमतौर पर, वेब पेजों के लिए उपयोग की जाने वाली अवधारणा single-page applications है: एक वेब पेज एक एप्लिकेशन विंडो का प्रतिनिधित्व करता है और जैसे ही यह विंडो दिखाई दे रही है (अक्सर आवेदन के पूरे जीवनकाल के लिए)। जब भी इसे कुछ अलग प्रदर्शित करने की आवश्यकता होती है, तो यह सर्वर से AJAX अनुप्रयोग अनुरोध डेटा की तरह, Node.js में चल रहे पृष्ठभूमि कोड से डेटा का अनुरोध करता है। पृष्ठ को पुनः लोड नहीं किया गया है, आमतौर पर जावास्क्रिप्ट टेम्पलेटिंग सामग्री को अपडेट करने के लिए उपयोग किया जाएगा।

वास्तव में यहां कोई सर्वर/ग्राहक संबंध नहीं है, संचार वास्तव में दोनों तरीकों से जा सकता है। दोनों पक्ष एक दूसरे को संदेश भेजने के लिए ipc मॉड्यूल का उपयोग कर सकते हैं (main process, renderer)। इन संदेशों में उनके साथ जुड़े कोई भी तर्क हो सकते हैं, इन्हें स्पष्ट रूप से एन्कोड करने की आवश्यकता नहीं है (आमतौर पर यह पैरामीटर को एन्कोड करने के लिए आंतरिक रूप से JSON का उपयोग करके कार्यान्वित किया जाता है, मैंने यह सत्यापित नहीं किया कि यह इलेक्ट्रॉन के साथ मामला है या नहीं)। आंतरिक रूप से, उस संदेश को पास करने के लिए libuv का उपयोग करके प्लेटफ़ॉर्म-विशिष्ट IPC तंत्र के माध्यम से कार्यान्वित किया जाता है।

+0

आईपीसी और मॉड्यूल के लिए टूटे हुए लिंक। .. कोड के साथ एक रेपो के लिए एक लिंक मिला है जो यह लागू करता है? –

+2

@MarkWilbur: मैंने लिंक अपडेट कर दिए हैं। –

3

हम sqlite3 के साथ पूरी तरह कार्यात्मक NodeJS सर्वर & कोणीय यूआई लागू किया,

का उपयोग कर sequelize ORM *।https://github.com/theallmightyjohnmanning/electron-express

परियोजनाओं में से कुछ हमें बहुत मदद की:

  • फ्रेमवर्क: https://github.com/angular-fullstack/generator-angular-fullstack विंडोज पैकेजिंग: इलेक्ट्रॉन बंडल ":" GitHub: इलेक्ट्रॉन userland/इलेक्ट्रॉन बंडल "
  • बनाना शॉर्टकट और स्वत: अपडेट : "इलेक्ट्रॉन गिलहरी-स्टार्टअप": "^ 1.0.0",
  • रिलीज इंस्टालर बनाना: "इलेक्ट्रॉन winstaller": "^ 2.3.4",
संबंधित मुद्दे

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