2016-05-11 15 views
5

मैं एक पूर्ण स्टैक ऐप बनाने के लिए रेल/जेएस/एचटीएमएल/सीएसएस पर रुबी में प्रोग्राम और विकास कर सकता हूं। हालांकि, HTTP अनुरोध/प्रतिक्रिया चक्र की मेरी समझ में छेद हैं। क्या निम्नलिखित अंक सही हैं?स्थानीय वेब सर्वर चलाने का क्या अर्थ है?

  • यदि मैं रेल ऐप बनाता हूं, और कमांड लाइन प्रकार rails server पर मुझे स्थानीय सर्वर मिलता है, जिसे मैं अनुरोध कर सकता हूं। यदि मैं ब्राउज़र खोलता हूं, तो localhost:3000 टाइप करें, और एंटर दबाएं, मैं स्थानीय सर्वर पर HTTP अनुरोध कर रहा हूं।
  • रेल डिफ़ॉल्ट रूप से वेब ब्राउजर नामक वेब सर्वर का उपयोग करते हैं, हालांकि थिन, प्यूमा और यूनिकॉर्न जैसे अन्य लोग हैं। ये सॉफ़्टवेयर के सभी टुकड़े हैं, और उन्हें वेब सर्वर क्या बनाता है यह तथ्य है कि सॉफ़्टवेयर HTTP अनुरोधों को संसाधित करने के लिए कार्यक्षमता लागू करता है।
  • जब मैं स्थानीय वेब सर्वर चलाता हूं, तो इसका मतलब है कि मेरा कंप्यूटर सॉफ़्टवेयर के इन टुकड़ों में से एक चला रहा है जो HTTP अनुरोधों को सुनता है।

उपरोक्त क्या है इसका मतलब है "स्थानीय वेब सर्वर चलाने के लिए"?

  • मैंने "स्थानीय वेब सर्वर चलाने" के तरीकों के अन्य उदाहरण देखे हैं। प्रोजेक्ट निर्देशिका में npm install -g http-server चलाने के लिए, और फिर localhost:8080 पर नेविगेट करना है। क्या यह एक ऐसा सॉफ़्टवेयर भी है जो पोर्ट 8080 पर HTTP अनुरोधों को चलाना शुरू करता है और स्वीकार करता है?
  • रूबी कमांड लाइन पर, रैक मणि इंस्टॉल करें: gem install rack। फिर एक नई रूबी फ़ाइल हम require 'rack' में, एक वेब सर्वर शुरू:

Rack::Server.start({ app: MySimpleApp, port: 3000 })

हम तो एक वेब अनुप्रयोग MySimpleApp कि रैक-संगत (उद्देश्य यह है कि call विधि का जवाब) है परिभाषित कर सकते हैं:

class MySimpleApp 
    def self.call 
    (...) 
    end 
end 

तो अब जब हम अपने ब्राउज़र में स्थानीयहोस्ट में नेविगेट करते हैं: 3000, MySimpleApp निष्पादित किया जाता है। क्या रैक बस इसे डिफ़ॉल्ट वेबब्रिक सर्वर चला रहा है? क्या उपर्युक्त आदेश केवल स्थानीय वेब सर्वर चलाते हैं और परिभाषित करते हैं कि HTTP अनुरोध कब होता है (MySimpleApp निष्पादित करें)?

उत्तर

5

आप वहां अपनी समझ पर बहुत अधिक सही हैं। HTTP सिर्फ एक टेक्स्ट-आधारित प्रोटोकॉल है, जो कई लोगों की तरह, टीसीपी/आईपी पर संचालित होता है।

अंतर्निहित वेबब्रिक सर्वर रुबी में लिखे गए HTTP सर्वर का सबसे अच्छा उदाहरण नहीं है, लेकिन यह विरासत कारणों के लिए शामिल है क्योंकि यह अक्सर शुरू करने के लिए "पर्याप्त" है। Pow काफी बेहतर है और उसी कंपनी द्वारा उत्पादित होने के बावजूद रेल ने इसे बड़े पैमाने पर नोड में लिखा है।

HTTP की सुंदरता, इंटरनेट आधारित प्रोटोकॉल की तरह, यह कोई फर्क नहीं पड़ता कि आप मानक के साथ अनुपालन करते समय कितनी भाषा का उपयोग करते हैं।

रैक एक परत है जो HTTP के पीछे संचालित होती है और अनुरोध/प्रतिक्रिया चक्र पर अमूर्तता की पतली परत प्रदान करती है।

+0

पहले अनुच्छेद के साथ सावधान: HTTP * देखो * जैसा कि यह टेक्स्ट-आधारित था। लेकिन यह वास्तव में एक बाइनरी प्रोटोकॉल है: यह ऑक्टेट्स पर चलता है, चरित्र नहीं। – DaSourcerer

+0

@DaSourcerer मुझे यकीन नहीं है कि यह एक भेद है जो 7-बिट ASCII या एक्सटेंशन [अन्य प्रारूपों को एन्कोड करें] (https://tools.ietf.org/html/rfc5987) पर आधारित प्रोटोकॉल के लिए महत्वपूर्ण है। बाइट्स और वर्ण समान हैं जब तक अन्यथा निर्दिष्ट नहीं किया जाता है। फ़्रेमिंग सादा-पाठ है। Payloads * बाइनरी हो सकता है। – tadman

+0

इस पर एक लड़ाई शुरू करने के लिए नहीं जा रहा है, लेकिन हाँ, अभ्यास में सहनशील रूप से दिखाई देने पर, यह महत्वपूर्ण है। 7 बिट एएससीआईआईआई में फिट करने वाले कोडवार्ड और डिलीमीटर वास्तव में इंटरऑपरेबिलिटी मुद्दों को रोकने और प्रोटोकॉल को पढ़ने के लिए अनुमति देने का एक तरीका है। ओह, और कुछ शीर्षलेख आरएफसी 5987 से पहले पेश किए गए कच्चे यूटीएफ 8 पेलोड की अनुमति देते हैं। 'कुकी 2' उनमें से एक है, मुझे लगता है। – DaSourcerer

2

एक सर्वर ऐसा कुछ है जो किसी प्रकार के डेटा स्थानांतरण के लिए पोर्ट (80, 443, 8080) खोलता है। पोर्ट 80 HTTP पोर्ट है और पोर्ट 443 HTTPS पोर्ट है। 8080 विकास के लिए आमतौर पर इस्तेमाल किया जाने वाला बंदरगाह है (जैसा कि 3000 है)।https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers

परिभाषा के अनुसार एक स्थानीय सर्वर आपकी मशीन पर चल रहा एक सर्वर है।

कुल मिलाकर, आप निश्चित रूप से सही रास्ते पर हैं।

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