2012-08-04 13 views
20

Come inviare un oggetto JavaScript con Socket.io dal server al client? Sto usando Socket.io come WebSocket (invio con .send() e ascolto con evento message). Quando sto cercando di fare qualcosa di simile sul lato server:Socket.io come inviare l'oggetto JavaScript

var myObject = { 
    message: 'Hello World!' 
} 

socket.send(myObject); 

sul lato client sto ottenendo solo che questa stringa: [object Object]

risposta

35

In realtà è necessario emettere un evento invece:

socket.emit('yourEvent', myObject); 

Se si utilizza .send(), si invia semplicemente la rappresentazione di stringa dell'oggetto, che è dove si sta verificando il problema. Nota che puoi usare .send(), ma dovresti prima codificare l'oggetto JSON e decodificarlo alla ricezione.

A meno che non si abbia un motivo specifico, è meglio utilizzare il metodo standard Socket.IO .emit(), poiché fa tutto questo per voi. Ecco a cosa serve.

4

socket.send() non capisce l'oggetto ma gode di JSON. È possibile utilizzare in questo modo:

socket.send(JSON.stringify(myObject)); 

E utilizzare JSON.parse(json) per analizzare JSON a Object.

9

Mi sono appena imbattuto in questo problema utilizzando alcuni esempi precedenti. Ecco la risposta che ho trovato: Migrating 0.6 to 0.7+, che riproduco qui sotto.


In v0.6, socket.send sarebbe convertire automaticamente un oggetto come {a: 'b'} a JSON. Dovresti inviare i dati a un cliente con:

socket.send({a: 'b'}); 

Mentre questo è interessante, rappresenta un problema fondamentale. JSON non codifica solo oggetti, ma anche stringhe, numeri, ecc.! Pertanto, l'API è più chiara se si dichiara esplicitamente di voler passare JSON (poiché c'è una penalità legata alle prestazioni associata alla codifica/decodifica JSON).

In v0.7, utilizzare la bandiera json:

socket.json.send({a: 'b'}); 

Ora è anche possibile emettere e ricevere eventi personalizzati tra il browser e il server:

socket.emit('my_event', {a: 'b'}); 

Argomenti per eventi vengono codificati in JSON automaticamente per te.

4

Provare a utilizzare questo sul lato server

socket.json.send({ your : 'data' });

e il metodo JSON.parse() sul lato client.

+0

Funziona come un incantesimo per me quando invio al mio client Android, evviva! – Jack