वस्तु दृढ़ता के लिए, मैंने node_redis का उपयोग करके Redissupport को जोड़ा। फिर क्लाइंट को बदल दिया। रेडिस पब/सबस के साथ चैनलों की सरणी पर लूप भेजें। लेकिन ध्यान दिया कि मुझे सदस्यता लेने वाले प्रत्येक उपयोगकर्ता के लिए एक नया रेडिस क्लाइंट बनाने की आवश्यकता है। और मुझे अभी भी socket.io क्लाइंट जानकारी को प्रकाशित करने के लिए संदेश भेजने के लिए स्टोर करने की आवश्यकता है। वह कितना स्केलेबल है? क्या मैं अन्य (बेहतर) कार्यान्वयन या आगे के अनुकूलन कर सकता हूं? आप क्या करेंगे?
हां, आपको प्रत्येक io अनुरोध के लिए एक नया रेडिस क्लाइंट बनाना होगा। यह भारी है और स्केलेबल नहीं है। लेकिन एक नया रेडिस क्लाइंट कनेक्शन बनाने से ज्यादा मेमोरी की खपत नहीं होती है। तो अगर आपका सिस्टम यूजर काउंट 5000 से ज्यादा नहीं है तो ठीक है। स्केल करने के लिए आप भारी प्रकाशन को हल करने के लिए स्लेव रेडिस सर्वर में जोड़ सकते हैं और सदस्यता ले सकते हैं और यदि आप बहुत सारे कनेक्शन बनाने के बारे में चिंतित हैं तो आप अपने OS uLIMIT को बढ़ा सकते हैं।
भेजे गए संदेश में आपको socket.io क्लाइंट को स्टोर करने की आवश्यकता नहीं है। एक बार रेडिस को सब्सक्राइब्ड चैनल संदेश प्राप्त हुआ। यह विशेष io क्लाइंट को संदेश भेजेगा।
subscribe.on("message",function(channel,message) {
var msg = { message: [client.sessionId, message] };
buffer.push(msg);
if (buffer.length 15) buffer.shift();
client.send(msg); > });
मल्टी चैनल को सब्सक्राइब करने के लिए। मेरा सुझाव है कि आप सभी उपयोगकर्ता को एक से अधिक चैनल के साथ प्री-स्टोर करें (आप स्टोरेज मोंगोडब या रेडिस का उपयोग कर सकते हैं)।
var store = redis.createClient();
var subscriber= redis.createClient()
store.hgetall(UID, function(e, obj){
subscriber.subscribe(obj.ChannelArray.toArray());
})