2012-02-12 18 views
13

Socket.io तो जैसे सेटिंग्स प्रति-सॉकेट चर सिफारिश की गई है:सॉकेट.io, socket.set() और सॉकेट संपत्ति के बीच अंतर?

socket.set('foo', bar, function() {});

वैरिएबल सेट और सॉकेट पर पहुँचा जा सकता है:

socket.foo = bar

वहाँ का उपयोग कर के लिए एक लाभ है प्रदान किया गया सेट() फ़ंक्शन?

उत्तर

13

कॉलिंग socket.foo आपकी संपत्ति को सॉकेट ऑब्जेक्ट पर ही सेट करता है। इसकी अनुशंसा नहीं की जाती है क्योंकि आप सॉकेट का उपयोग करने वाली आंतरिक संपत्ति को ओवरराइड कर सकते हैं और इस पर निर्भर करता है। जब आप socket.set() पर कॉल करते हैं तो यह एक आंतरिक डेटा संरचना में संग्रहीत होता है जो आंतरिक गुणों के साथ संघर्ष नहीं करेगा।

https://github.com/LearnBoost/socket.io/blob/master/lib/socket.js#L246

Socket.prototype.set = function (key, value, fn) { 
    this.store.set(key, value, fn); 
    return this; 
}; 
+0

+1 फ़ंक्शन परिभाषा सहित! तो यह नामस्थान टकराव से बचने का एकमात्र मामला है? उनके डेटास्टोर का उपयोग करने के लिए कोई अन्य लाभ? – knite

+0

जहां तक ​​मुझे पता नहीं है, मुझे लगता है कि टकराव मुख्य बात है। – JohnP

+11

इस उत्तर को विस्तारित करने के लिए, प्राप्त/सेट/डेल विधियों का कारण एडाप्टर को कुंजी/मान पास करना है, डिफ़ॉल्ट रूप से यह 'मेमोरीस्टोर' है, लेकिन आप एडाप्टर को आसानी से mysql, redis, mongo में बदल सकते हैं आदि आदि – RobertPitt

2

मेरा मानना ​​है कि प्राथमिक कारण इतना है डेटा सॉकेट से जुड़ा बहु प्रक्रिया सुरक्षित है।

यदि आप ऐप हैं एकल प्रक्रिया है, तो हमेशा एक प्रक्रिया होगी, और आप सुनिश्चित हैं कि आप एक आंतरिक विशेषता को ओवरराइड नहीं कर रहे हैं, socket.foo = bar ठीक होगा। भविष्य में प्रूफिंग और सर्वोत्तम प्रथाओं के मामले के रूप में प्राप्त/सेट का उपयोग करना अभी भी सबसे अच्छा होगा।

एक बहु-प्रक्रिया दुनिया में, यदि आप एक प्रक्रिया में socket.foo = bar सेट करते हैं, तो दूसरी प्रक्रिया में socket.foo अपरिभाषित होगा।

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