2012-02-12 10 views

Respuesta

13

Llamar a socket.foo establece su propiedad en el objeto del zócalo. Esto no se recomienda porque podría anular una propiedad interna que utiliza el socket y de la que depende. Cuando llame al socket.set(), esto se almacena en una estructura de datos interna que no entrará en conflicto con las propiedades internas.

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 para incluir la definición de la función! ¿Entonces solo se trata de evitar colisiones de espacios de nombres? ¿Algún otro beneficio al usar su almacén de datos? – knite

+0

No sé, supongo que las colisiones son lo principal. – JohnP

+11

También para ampliar esta respuesta, la razón de los métodos get/set/del es pasar la clave/valor al adaptador, de manera predeterminada, esto es un 'MemoryStore', pero puede cambiar fácilmente el adaptador a mysql, redis, mongo etcétera etcétera – RobertPitt

2

Creo que la razón principal es que los datos adjuntos a la toma es seguro multi-proceso.

Si su aplicación es un proceso único, siempre será un proceso único, y está seguro de que no está anulando un atributo interno, socket.foo = bar estará bien. Todavía sería mejor utilizar get/set como una cuestión de futuro y mejores prácticas.

En un mundo multiproceso, si configura socket.foo = bar en un proceso, en otro proceso socket.foo no estará definido.

Cuestiones relacionadas