Socket.io comment envoyer un objet JavaScript

comment envoyer un objet JavaScript avec Socket.io du serveur au client? J'utilise Socket.io as WebSocket (sending with .send() et d'écouter avec message événement). Quand je suis en train de faire quelque chose comme côté serveur:

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

socket.send(myObject);

côté client, je n'obtiens que cette chaîne:[object Object]

21
demandé sur Amro 2012-08-04 05:14:53

4 réponses

Vous avez réellement besoin d'émettre un événement à la place:

 socket.emit('yourEvent', myObject);

Si vous utilisez .send(), vous envoyez simplement la représentation de chaîne de votre objet, qui est l'endroit où le problème se produit. Notez que vous pouvez utiliser .send(), mais il faudrait d'abord encoder L'objet JSON, et le décoder à la réception.

sauf si vous avez une raison spécifique, il est préférable d'utiliser la prise standard.IO .emit() méthode, comme elle fait tout cela pour vous. Qu'est ce que c'est là pour.

38
répondu Brad 2012-08-04 01:20:14

je viens de tomber sur ce problème en utilisant un exemple plus ancien. Voici la réponse que j'ai trouvé: migration 0,6 à 0,7+, que je reproduis ci-dessous.


en v0.6,socket.send convertirait automatiquement un objet comme {a: 'b'} JSON. Vous enverriez des données à un client avec:

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

bien que cela soit cool, cela pose un problème fondamental. JSON n'encode pas seulement des objets, mais aussi des chaînes, des nombres, etc.! Ainsi, L'API est plus claire si vous déclarez explicitement vous voulez passer JSON (puisqu'il y a une pénalité de performance associée à encoder/décoder JSON).

en v0.7, utilisez le json drapeau:

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

Maintenant, vous pouvez également émettre et recevoir des événements entre le navigateur et le serveur:

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

les Arguments pour les événements sont encodés dans JSON automatiquement pour vous.

9
répondu Amro 2013-05-18 10:16:49

socket.send() NE COMPREND PAS l'objet mais il aime avec JSON. Vous pouvez utiliser de cette façon:

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

Et utiliser JSON.parse(json) pour Parser JSON à Object.

4
répondu SaliproPham 2012-10-16 03:35:58

essayez de l'utiliser sur votre serveur

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

et JSON.parse() méthode du côté client.

4
répondu Salman 2014-12-10 00:18:19