Socket.io: las cadenas de datos cambian sobre el socket

Creado en 30 nov. 2017  ·  5Comentarios  ·  Fuente: socketio/socket.io

Nota : para preguntas de soporte, utilice uno de estos canales: stackoverflow o slack

Tú quieres:

  • [x] informar un error
  • [] solicitar una función

Comportamiento actual

al emitir un objeto como datos y dentro de él usando una cadena de (o el unicode \u2265 ) lo convierte en la letra de cadena e y pasa a d

Pasos para reproducir (si el comportamiento actual es un error)

lado del cliente

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

lado del servidor

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

Nota : la mejor manera de obtener una respuesta rápida es proporcionar un caso de prueba fallido, bifurcando el siguiente violín, por ejemplo.

Comportamiento esperado

que los datos se mantendrán igual de forma constante

Configuración

  • SO: Windows
  • navegador: Chrome 62
  • versión de socket.io: 1.7.2

Otra información (p. Ej., Seguimiento de pila, problemas relacionados, sugerencias de cómo solucionarlo)

Comentario más útil

lo probé con 2.0.4, todavía sucede ...
lo arregló con la codificación y decodificación de los datos con este código:
lado del cliente

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

lado del servidor

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

Todos 5 comentarios

Esto sucede solo cuando el socket no se ha actualizado (primer uso) durante xhr,
después de que se actualiza a websocket, todos los datos se envían correctamente

ver # 451 y # 572

Hubo un problema con el análisis de utf8 en la versión 1.x, ¿podría intentarlo con la versión 2.x?

Relacionado:

lo probé con 2.0.4, todavía sucede ...
lo arregló con la codificación y decodificación de los datos con este código:
lado del cliente

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

lado del servidor

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

Sí, eso parece estar funcionando. ¡Gracias!

¿Fue útil esta página
0 / 5 - 0 calificaciones