2015-04-29 12 views
9

डॉक्स में ग्राहक संबद्ध डेटा को संग्रहीत करने के लिए कैसे कह socket.io .Get .Set का समर्थन नहीं करता अबsocket.io 1.0

यह स्टोर ग्राहक के लिए ठीक तरह

io.sockets.on('connection', function (client) { 
    client.on('data', function (somedata) {    
     client['data'] = somedata; 
    });  
}); 
में

संबद्ध डेटा है मामले में मुझे एकाधिक नोड्स चाहिए?

+0

साथ क्या चर 'client' है? किसी को उत्तर देने में सक्षम होने के लिए यहां संदर्भ का एक समूह गुम हो रहा है। – jfriend00

+0

@ jfriend00 अपडेट किया गया – Herokiller

उत्तर

15

हां, socket.io socket ऑब्जेक्ट में गुण जोड़ने के लिए ठीक है। आपको उन नामों का उपयोग न करने के लिए सावधान रहना चाहिए जो अंतर्निहित गुणों या विधियों के साथ संघर्ष कर सकते हैं (मैं एक अग्रणी अंडरस्कोर जोड़ने या किसी प्रकार के नाम उपसर्ग के साथ उन्हें नाम देने का सुझाव देना चाहता हूं)। लेकिन एक सॉकेट सिर्फ एक जावास्क्रिप्ट ऑब्जेक्ट है और जब तक आप मौजूदा गुणों के साथ कोई संघर्ष नहीं करते हैं, तब तक आप इस तरह के गुणों को जोड़ने के लिए स्वतंत्र हैं।

ऐसा करने के अन्य तरीके हैं जो socket.id का उपयोग अपनी डेटा संरचना में कुंजी के रूप में करते हैं।

var currentConnections = {}; 
io.sockets.on('connection', function (client) { 
    currentConnections[client.id] = {socket: client}; 
    client.on('data', function (somedata) { 
     currentConnections[client.id].data = someData; 
    });  
    client.on('disconnect', function() { 
     delete currentConnections[client.id]; 
    }); 
}); 
+1

यह जानकारी क्लाइंट को देखने/म्यूटेट करने के लिए उपलब्ध है? –

+0

@Alex_Nabu - नहीं। 'CurentConnections' ऑब्जेक्ट में जो डेटा है, वह सर्वर-साइड डेटा है और सर्वर के लिए निजी है। – jfriend00

+1

क्षमा करें, अगर मैं क्लाइंट को उत्परिवर्तनीय होने पर सॉकेट ओबीजे में डेटा संलग्न करना चाहता था। अब मैं देखता हूं कि आपने क्या किया। मेरे पास एक duh पल था –

8

हां, यह तब तक संभव है जब तक एक ही नाम के साथ कोई अन्य अंतर्निहित गुण न हो।

io.sockets.on('connection', function (client) { 
    client.on('data', function (somedata) { 
     // if not client['data'] you might need to have a check here like this 
     client['data'] = somedata; 
    });  
}); 

मैं एक और तरीका सुझाव देंगे, लेकिन ECMAScript 6 weak maps

var wm = new WeakMap(); 

io.sockets.on('connection', function (client) { 
    client.on('data', function (somedata) { 
     wm.set(client, somedata); 
     // if you want to get the data 
     // wm.get(client); 
    }); 
    client.on('disconnect', function() { 
     wm.delete(client); 
    }); 
});