2012-02-12 2 views

risposta

13

La chiamata socket.foo imposta la proprietà sull'oggetto socket stesso. Questo non è raccomandato perché potresti ignorare una proprietà interna utilizzata da socket e dipende da. Quando si chiama socket.set() questo è memorizzato in una struttura dati interna che non entrerà in conflitto con le proprietà interne.

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 per includere la definizione della funzione! Quindi è solo una questione di evitare le collisioni nello spazio dei nomi? Altri vantaggi nell'utilizzo del loro datastore? – knite

+0

Non per quanto ne so, immagino che le collisioni siano la cosa principale. – JohnP

+11

Anche per estendere questa risposta, il motivo per i metodi get/set/del è di passare la chiave/valore all'adattatore, di default è un 'MemoryStore', ma puoi facilmente cambiare l'adattatore in mysql, redis, mongo ecc ecc – RobertPitt

2

Credo che la ragione principale è così dati allegati alla presa è sicuro multi-processo.

Se l'app è un processo singolo, sarà sempre un processo singolo e sei sicuro di non sovrascrivere un attributo interno, socket.foo = bar andrà bene. Sarebbe comunque meglio usare get/set come una questione di future prove e best practice.

In un mondo a più processi, se si imposta socket.foo = bar in un processo, in un altro processo socket.foo non sarà definito.