2012-08-04 5 views
20

Wie JavaScript-Objekt mit Socket.io von Server zu Client senden? Ich verwende Socket.io als WebSocket (sende mit .send() und höre mit message Ereignis). Wenn ich versuche, so etwas wie auf Server-Seite zu tun:Socket.io, wie JavaScript-Objekt senden

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

socket.send(myObject); 

auf Client-Seite Ich erhalte nur diese Zeichenfolge: [object Object]

Antwort

35

Sie benötigen tatsächlich ein Ereignis zu emittieren statt:

socket.emit('yourEvent', myObject); 

Wenn Sie .send() verwenden, senden Sie einfach die Zeichenfolgendarstellung Ihres Objekts, wo das Problem auftritt. Beachten Sie, dass Sie .send() verwenden können, aber Sie müssten das Objekt zuerst JSON-encodieren und es beim Empfang decodieren.

Sofern Sie nicht einen bestimmten Grund haben, ist es am besten, die Standardmethode Socket.IO .emit() zu verwenden, da dies alles für Sie ist. Dafür ist es da.

4

socket.send() versteht nicht Objekt, aber es genießt mit JSON. Sie können auf diese Weise verwenden:

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

Und verwenden JSON.parse(json) JSON zu analysieren Objekt.

9

Ich bin gerade in dieses Problem mit einem älteren Beispiel geraten. Hier ist die Antwort, die ich gefunden habe: Migrating 0.6 to 0.7+, die ich unten reproduzieren.


In v0.6, socket.send würde automatisch ein Objekt wie {a: 'b'} zu JSON konvertieren. Sie würden Daten an einen Client senden mit:

Während das ist cool, es stellt ein grundlegendes Problem. JSON kodiert nicht nur Objekte, sondern auch Strings, Zahlen, etc! Daher ist die API klarer, wenn Sie explizit angeben, dass Sie JSON übergeben möchten (da es eine Leistungseinbuße beim Kodieren/Dekodieren von JSON gibt).

In v0.7, verwenden Sie die json Flagge:

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

Argumente für Ereignisse codiert erhalten in JSON:

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

Jetzt können Sie auch benutzerdefinierte Ereignisse zwischen dem Browser und dem Server senden und empfangen automatisch für dich.

4

Versuchen Sie, diese auf dem Server-Seite

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

und die JSON.parse() Methode auf Ihrer Client-Seite verwenden.

+0

Funktioniert wie ein Charme für mich beim Senden an meinen Android-Client, Prost! – Jack