2012-05-30 24 views
5

मैं वेब सर्वर के लिए नोडजेज़ का उपयोग कर रहा हूं जो जीईटी पैराम को डीकोड करता है और कुछ एन्कोडेड प्रारूप में डेटा देता है। डिकोड/एन्कोड नोडजेज़ के क्रिप्टो मॉड्यूल का उपयोग करके किया जाता है, जो तुल्यकालिक लगता है। हालांकि एक अनुरोध की सेवा करने के लिए समय निकाला गया है, घटना लूप को अवरुद्ध करने से सेवा को समेकन के साथ खराब प्रदर्शन किया गया है।नोडजेस में सीपीयू बाध्य कार्यों को लागू करने के तरीके

मेरी आवश्यकता सरल है, ईवेंट लूप के बाहर एनकोड/डीकोड कार्यक्षमता बनाएं।

  1. अलग प्रक्रिया (child_process या क्लस्टर)

यह या तो पूरी तरह से इस उद्देश्य के लिए एक अलग प्रक्रिया हो सकती है, लेकिन एनकोड के बाद से/डिकोड बच्चे प्रक्रिया में बाधा डाल दिया जाएगा इस बच्चे प्रक्रिया रुक जाएगी नए संदेश प्राप्त करने के लिए यानी ऐसी स्थिति कभी नहीं होगी जब दो तारों को एन्कोड किया जाता है क्योंकि बाल प्रक्रिया भी एक थ्रेड हो जाएगी।

  1. प्रत्येक अनुरोध के लिए अलग-अलग थ्रेड (धागे-ए-गोगो या फाइबर या नोड WebWorker)

, प्रत्येक अनुरोध एनकोड/डीकोड प्रक्रिया निष्पादित करने के लिए एक अलग थ्रेड बनाएं लेकिन में से कोई भी मॉड्यूल अपेक्षित काम करता प्रतीत होता है, यानी थ्रेड-ए-गोगो एनपीएम के माध्यम से स्थापित नहीं होता है, फाइबर ने रन(), नोड-वेबवर्कर not working पर एक अलग थ्रेड नहीं बनाया है।

क्या किसी को भी ऐसी ही समस्या का सामना करना पड़ा है या सरल संदेश पास करने के साथ नोडज में आसानी से धागे बनाने का कोई तरीका है।

+0

जवाब # 1 आप की जरूरत है:

http://nodejs.org/api/cluster.html#cluster_cluster_fork_env

क्लस्टर के साथ

, यह कुछ ऐसा काम करेगा निष्क्रिय घटना संचालित शैली में अपनी अवरुद्ध/सक्रिय प्रतीक्षा को चालू करने के लिए – ControlAltDel

+0

मुझे लगता है कि सीपीयू बाध्य कार्य और नोड एक अच्छा फिट नहीं है। फिर आप उदाहरण के लिए जावा का उपयोग करने के बेहतर हैं और नोड/जावा एक दूसरे के साथ प्रभावी ढंग से संवाद करने दें। – Alfred

+0

मैं समझता हूं कि नोडज में सीपीयू बाध्य कार्य भयानक है, इसलिए अलग-अलग इसे संभालने के लिए क्रिप्टो मॉड्यूल में निर्मित होने की उम्मीद है। लेकिन जावा/सी पर रिले करने से कोई अन्य विकल्प नहीं है? – mdprasadeng

उत्तर

1

यह नोड की बाल प्रक्रियाओं में बनाया गया है। यहाँ डॉक्स:

http://nodejs.org/api/child_process.html#child_process_child_send_message_sendhandle

तुम भी क्लस्टर इस्तेमाल कर सकते हैं:

if (cluster.isMaster) { 
    var worker = cluster.fork(); 
    worker.send('encodeThisString'); 

} else if (cluster.isWorker) { 
    process.on('message', function(msg) { 
    var encrypted = crypto.doSomeEncryption(msg); 
    process.send(encrypted); 
    }); 
}