मैं सिर्फ रेडिस और नोड.जेएस सीख रहा हूं मेरे पास दो प्रश्न हैं जिनके लिए मुझे कोई संतोषजनक उत्तर नहीं मिला।रेडिस और नोड.जेएस और सॉकेट.ओ प्रश्न
मेरा पहला सवाल node.js. के भीतर रेडिस क्लाइंट का पुन: उपयोग करने के बारे में है। मुझे यह प्रश्न और उत्तर मिला है: How to reuse redis connection in socket.io?, लेकिन यह मुझे पर्याप्त संतुष्ट नहीं किया।
अब, यदि मैं कनेक्शन ईवेंट के भीतर रेडिस क्लाइंट बना देता हूं, तो यह प्रत्येक कनेक्शन के लिए तैयार किया जाएगा। इसलिए, यदि मेरे पास 20k समवर्ती उपयोगकर्ता हैं, तो 20k रेडिस क्लाइंट होंगे।
यदि मैं इसे कनेक्शन ईवेंट से बाहर रखता हूं, तो यह केवल एक बार पैदा होगा।
उत्तर यह कह रहा है कि वह प्रत्येक समारोह के लिए कनेक्शन ईवेंट के बाहर तीन क्लाइंट बनाता है।
हालांकि, मैं माईएसक्यूएल को जानता हूं कि जब एक आवेदन लिखते हैं जो बाल प्रक्रियाओं को जन्म देता है और समानांतर में चलता है, तो आपको उस कार्य के भीतर अपना MySQL क्लाइंट बनाना होगा जिसमें आप बाल उदाहरण बना रहे हों। यदि आप इसे इसके बाहर बनाते हैं, तो MySQL "MySQL सर्वर चला गया है" की त्रुटि देगा क्योंकि बाल प्रक्रियाएं उसी कनेक्शन का उपयोग करने का प्रयास करेंगी। यह प्रत्येक बच्चे प्रक्रियाओं के लिए अलग से बनाया जाना चाहिए।
तो, यदि आप प्रत्येक समारोह के लिए तीन अलग-अलग रेडिस क्लाइंट बनाते हैं, तो यदि आपके पास 30k समवर्ती उपयोगकर्ता हैं जो एक साथ 2k संदेश भेजते हैं, तो आपको एक ही समस्या में भाग लेना चाहिए, है ना? इसलिए, प्रत्येक "उपयोगकर्ता" के पास कनेक्शन ईवेंट के भीतर अपना स्वयं का रेडिस क्लाइंट होना चाहिए। क्या मैं सही हू? यदि नहीं, तो node.js या redis कैसे MySQL से अलग समवर्ती अनुरोधों को संभालता है? यदि इसका अपना तंत्र है और रेडिस क्लाइंट के भीतर बाल प्रक्रियाओं की तरह कुछ बनाता है, तो हमें फिर तीन अलग-अलग रेडिस क्लाइंट बनाने की आवश्यकता क्यों है? एक पर्याप्त होना चाहिए।
मुझे आशा है कि प्रश्न स्पष्ट था।
- अद्यतन -
मैं निम्नलिखित प्रश्न के लिए एक जवाब मिल गया है। http://howtonode.org/control-flow उत्तर देने की कोई आवश्यकता नहीं है लेकिन मेरा पहला प्रश्न अभी भी मान्य है।
- अद्यतन -
मेरे दूसरे प्रश्न यह है। मैं जेएस और नोड.जे.एस. में भी अच्छा नहीं हूं तो, मुझे पता है कि, यदि आपको किसी ईवेंट की प्रतीक्षा करने की आवश्यकता है, तो आपको पहले फ़ंक्शन के भीतर दूसरे फ़ंक्शन को समाहित करने की आवश्यकता है। (मुझे अभी तक शब्दावली नहीं पता है)। मुझे एक उदाहरण देने दें;
socket.on('startGame', function() {
getUser();
socket.get('game', function (gameErr, gameId) {
socket.get('channel', function (channelErr, channel) {
console.log(user);
client.get('games:' + channel + '::' + gameId + ':owner', function (err, owner) { //games:channel.32:game.14
if(owner === user.uid) {
//do something
}
});
}
});
});
तो, अगर मैं इसे सही ढंग से सीख रहा हूँ, मैं समारोह के भीतर हर समारोह को चलाने के लिए अगर मैं प्रतीक्षा करने के लिए मैं/हे जवाब चाहिए की जरूरत है। अन्यथा, node.js की गैर-अवरुद्ध तंत्र पहले फ़ंक्शन को चलाने की अनुमति देगा, इस मामले में यह परिणाम समानांतर में प्राप्त होगा, लेकिन दूसरे फ़ंक्शन के परिणाम होने पर परिणाम नहीं हो सकता है। इसलिए, यदि आप उदाहरण के लिए रेडिस से परिणाम प्राप्त कर रहे हैं, और आप दूसरे फ़ंक्शन के भीतर परिणाम का उपयोग करेंगे, तो आपको इसे Redis फ़ंक्शन के भीतर encapsulate करना होगा। अन्यथा परिणाम प्राप्त किए बिना दूसरा फ़ंक्शन चलाएगा।
तो, इस मामले में, यदि मुझे 7 अलग-अलग कार्यों को चलाने की आवश्यकता है और 8. फ़ंक्शन को उन सभी के परिणाम की आवश्यकता होगी, तो क्या मुझे उन्हें इस तरह लिखना होगा, दोबारा? या क्या मैं कुछ न कुछ भूल रहा हूं।
मुझे आशा है कि यह भी स्पष्ट था।
धन्यवाद एक बहुत,
वैसे, अपने दूसरे प्रश्न के अपने उत्तर को पूरा करने के लिए, आप फ्लो-कंट्रोल लाइब्रेरीज़ "एसिंक" और "चरण" को भी देख सकते हैं। –