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]
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.
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.
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.
essayez de l'utiliser sur votre serveur
socket.json.send({ your : 'data' });
et JSON.parse()
méthode du côté client.