2012-04-12 13 views
5

मैं एक PHP वेब एप्लिकेशन डेवलपर हूं जिसने PHP w/codeIgniter में कई बड़ी परियोजनाएं बनाई हैं। PHP ने हमेशा काम पूरा कर लिया है, लेकिन अब मैं एक नई परियोजना पर काम कर रहा हूं जिसे मैं क्लाइंट-साइड पर जावास्क्रिप्ट extjs4 ढांचे के साथ बना रहा हूं। और मेरे पास अनुभवी नोडजेस डेवलपर्स के लिए कुछ प्रश्न हैं।एक विशिष्ट परिस्थिति में एक PHP डेवलपर को विकास की नोडज शैली की व्याख्या करना

मेरे हालिया PHP प्रोजेक्ट में, उपयोगकर्ता-लॉगिन अनुरोध के लिए मेरे सर्वर को फेसबुक पर एपीआई कॉल करने की आवश्यकता होती है। स्केलेबिलिटी में सुधार करने के लिए जिस तरह से मैंने इसे संभाला था, क्या मेरा क्लाइंट प्रारंभिक लॉगिन अनुरोध करेगा, सर्वर 'गियरमैन' जॉब क्यूइंग सर्वर से अनुरोध पास करेगा, और पृष्ठभूमि कार्यकर्ता प्रक्रिया नौकरी पकड़ लेगी और एपीआई कॉल करेगी। इस बीच, सर्वर क्लाइंट को जवाब देगा और फिर ग्राहक का ब्राउज़र AJAX के साथ सर्वर को मतदान करना शुरू कर देगा यह देखने के लिए कि क्या काम पूरा हो गया है या नहीं। (ओह, और मैंने कार्यकर्ता से फेसबुक एपीआई कॉल के परिणामों को मेमकैच के साथ एप्लिकेशन सर्वर पर पास कर दिया)। मैंने PHP से लॉक होने के बाद उपयोगकर्ताओं से अधिक समवर्ती अनुरोधों को संभालने के लिए अपने एप्लिकेशन सर्वर को मुक्त करने के लिए यह किया और एक फेसबुक एपीआई कॉल में कई सेकंड लगते हैं।

मेरा सवाल यह है कि क्या यह ऐप सर्वर का एक संपूर्ण मॉडल है, एक गियरमैन जॉब क्यूइंग सर्वर है, और पृष्ठभूमि कार्यकर्ता नोडज विकास के लिए समझ में हैं क्योंकि नोडज गैर-लॉकिंग है? क्या मैं क्लाइंट से लॉगिन करने के लिए एजेक्स अनुरोध स्वीकार करता हूं, एप्लिकेशन एपीआई से फेसबुक एपीआई को कॉल करता हूं और इसके प्रतिक्रिया की प्रतीक्षा करता हूं (अन्य उपयोगकर्ता के अनुरोधों को संभालने के दौरान नोडज गैर-लॉकिंग के बाद) और फिर उपयोगकर्ता को जवाब देता है?

मैं भयानक heroku पर्यावरण का लाभ लेने में सक्षम होने के लिए नोडज विकास में शामिल होने पर भी विचार कर रहा हूं।

+1

मेरी इच्छा है कि कोई इसका जवाब दे, मैं एक समान स्थिति में हूं – Dhiraj

उत्तर

2

संक्षिप्त उत्तर हाँ है, जिस तरह से आप आमतौर पर इसे नोड सिस्टम में संभालते हैं, वैसे ही आप इसका वर्णन कैसे करते हैं।

क्योंकि नोड गैर-अवरुद्ध है, इवेंट-लूप लगातार क्रियाशील अनुरोधों की तलाश में है। यहाँ का उपयोग कर एक उदाहरण है node-facebook-client

console.log('start'); 

    client.graphCall(path, params, method)(function(result) { 
    // fires whenever request is completed 
    console.log('facebook returned'); 
    }); 

    console.log('end'); 

आउटपुट

start 
    end 
    facebook returned 

आप कल्पना कर सकते हैं, यह मूल रूप से है (कई npm फेसबुक एपीआई के साथ इस्तेमाल किया जा करने के लिए बनाया मॉड्यूल में से एक) क्या सभी उपद्रव नोड के साथ के बारे में है (इसके अलावा यह वास्तव में वास्तव में तेज़ है)। उस ने कहा, यह भी है जहां सीखने की वक्र नोड - असिंक्रोनस निष्पादन के साथ है। 'अंत' 'फेसबुक रिटर्न' के बाद आने के लिए की जरूरत है, तो आप कॉलबैक में यह

console.log('start'); 

    client.graphCall(path, params, method)(function(result) { 
    // fires whenever request is completed 
    console.log('facebook returned'); 
    console.log('end'); 
    }); 

साथ ही डाल करने के लिए होगा, यह आपके आवेदन में गतिशील बच्चे प्रक्रियाओं को एकीकृत करने के लिए जब यह आवश्यक है प्राथमिक है, सहित अतिरिक्त नोड प्रक्रिया। से official docschild_process.fork के लिए:

var cp = require('child_process'); 

var n = cp.fork(__dirname + '/sub.js'); 

n.on('message', function(m) { 
    console.log('PARENT got message:', m); 
}); 

n.send({ hello: 'world' }); 

और फिर बच्चे को स्क्रिप्ट, 'sub.js' इस प्रकार दिखाई देंगे:

process.on('message', function(m) { 
    console.log('CHILD got message:', m); 
}); 

process.send({ foo: 'bar' }); 

बच्चे में प्रक्रिया वस्तु एक भेजें होगा() विधि, और प्रक्रिया प्रत्येक बार जब यह अपने चैनल पर एक संदेश प्राप्त करता है वस्तुओं को उत्सर्जित करेगा।

+0

वाह यह अविश्वसनीय है, क्या कोई भी कारण है कि कार्यकर्ता प्रक्रियाओं का उपयोग करने के लिए कोई कारण नहीं है यदि कोई नोड जेएस वेब प्रक्रिया लंबे समय तक चलने वाले संचालन को संभाल सकती है जैसे कि एपीआई कॉल अनुरोध और लॉक नहीं? –

+2

वर्कर थ्रेड का उपयोग करना अभी भी बहुत आसान हो सकता है उदाहरण के लिए थ्रॉटल वर्कलोड (सर्वर ओवरलोड का सामना करने के लिए), लेकिन कई श्रमिकों को बनाकर, वर्क लोड बढ़ाने के लिए भी। – Alfred

+1

एकाधिक प्रक्रियाओं में एक नोड ऐप को दोहराने के लिए बहुत ही आम है और फिर 'क्लस्टर' नामक किसी अन्य मूल मॉड्यूल का उपयोग करके उनके बीच लोड-बैलेंस, जो 'child_process.fork' के लिए केवल एक फैंसी रैपर है जो श्रमिकों को एक टीसीपी सर्वर साझा करने की अनुमति देता है। भले ही यह गैर-अवरुद्ध हो, फिर भी एक नोड प्रक्रिया एक समय में केवल 1 चीज कर सकती है, इसलिए कई प्रक्रियाओं में प्रतिकृतिकरण समरूपता बढ़ जाती है। –

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