2012-04-28 11 views
18

Solo quiero adjuntar algunas variables a mis sockets, pero no entiendo los métodos .get y .set. Ambos tienen un tercer argumento para una devolución de llamada. ¿Se puede omitir esto? ¡¿Para qué sirve?! ¿La devolución de llamada en sí misma en argumentos?socket.io socket.set y socket.get - ¿Para qué sirve el argumento de devolución de llamada?

Mi mejor versión es que está disponible para cuando socket.io no está utilizando la memoria del almacén pero está guardando esto en otro lugar y necesita un error para verificar la devolución de llamada.

socket.on('set nickname', function (name) { 
    socket.set('nickname', name, function (arguments) { 
     doSomethingMysterious(); 
    }); 

estoy usando socket.io 0.9.x

La función se define en socket.js

/** 
* Stores data for the client. 
* 
* @api public 
*/ 

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

Respuesta

12

set y get son asíncronas. Se llamará a la devolución de llamada cuando se completen estas operaciones. Puede omitirlo, o puede usarlo para el propósito que desee, no solo para el manejo de errores.

+0

Gracias, el hecho de que son asíncronas hace que sea más fácil para envolver mi dirígete a todo el asunto. En casos comunes, ¿esto se usaría para guardar valores en un db en algún lugar y luego usar otra emisión para el cliente para hacerles saber que se guardó? Supongo que todavía no está claro para mí, aparte de la colisión del espacio de nombres, ¿por qué no podríamos simplemente usar algo como 'socket.property = value;' Acabo de empezar con node.js Hace 2 días, perdona mi ignorancia! –

+2

Sí, una buena razón por la que usaría 'set',' get' (como opuesto a simplemente guardar un valor en un objeto), es guardarlo en el db. De hecho, 'socket.io' parece tener una compilación en' redis store', pero no soy un usuario de socket.io, así que no puedo decir cómo se puede usar. Si miras el código fuente, cuando llamas a 'set' esto pone el valor en' store': https://github.com/LearnBoost/socket.io/blob/master/lib/socket.js#L246 – mihai

+0

y que .store por defecto es redis? ¿O es como estar en su lugar para que pueda configurar su propia tienda? – Funkodebat

32

Las funciones get y set en el objeto socket were removed in version 1.x. La forma correcta de almacenar y recuperar valores ahora es a través de las propiedades en el objeto socket, así:

socket.on('set nickname', function (name) { 
    socket.nickname = name; 
}); 

Como se ve en la example code from the official repo.

+0

¿Dónde se almacenará esto? ¿Esto se entregará al cliente o se almacenará solo en el servidor? – C4u

Cuestiones relacionadas