Socket.io: les chaînes de données changent sur le socket

Créé le 30 nov. 2017  ·  5Commentaires  ·  Source: socketio/socket.io

Remarque : pour les questions d'assistance, veuillez utiliser l'un de ces canaux : stackoverflow ou slack

Tu veux:

  • [x] signaler un bogue
  • [ ] demander une fonctionnalité

Comportement actuel

lors de l'émission d'un objet en tant que données et en utilisant une chaîne de (ou l'unicode \u2265 ) il le transforme en la lettre de chaîne e et à d

Étapes à reproduire (si le comportement actuel est un bug)

côté client

channel.emit('data', {data:'≥'});

du côté serveur

socket.on('data',({data:bla})=>{
console.log(bla); // prints 'e'
});

Remarque : le meilleur moyen d'obtenir une réponse rapide est de fournir un cas de test défaillant, en forçant le violon suivant par exemple.

Comportement attendu

que les données resteront les mêmes de manière cohérente

Installer

  • OS : Windows
  • navigateur : Chrome 62
  • version socket.io : 1.7.2

Autres informations (par exemple, traces de pile, problèmes connexes, suggestions de résolution)

Commentaire le plus utile

essayé avec 2.0.4, ça arrive toujours...
l'a corrigé avec l'encodage et le décodage des données avec ce code :
côté client

function strencode( data ) {
    return encodeURIComponent( escape( JSON.stringify( data ) ) );
}

du côté serveur

function strdecode( data ) {
    return JSON.parse( unescape( decodeURIComponent( data ) ) );
}

Tous les 5 commentaires

Cela se produit uniquement lorsque le socket n'a pas été mis à niveau (première utilisation) sur xhr,
après la mise à niveau vers websocket, toutes les données sont envoyées correctement

voir #451 et #572

Il y a eu un problème concernant l'analyse utf8 dans la version 1.x, pourriez-vous s'il vous plaît essayer avec la version 2.x ?

En rapport:

essayé avec 2.0.4, ça arrive toujours...
l'a corrigé avec l'encodage et le décodage des données avec ce code :
côté client

function strencode( data ) {
    return encodeURIComponent( escape( JSON.stringify( data ) ) );
}

du côté serveur

function strdecode( data ) {
    return JSON.parse( unescape( decodeURIComponent( data ) ) );
}

Ouais ça a l'air de marcher. Merci!

Cette page vous a été utile?
0 / 5 - 0 notes