el envío de un objeto de javascript a través de websockets con faye

Hola a todos estoy tratando de enviar un objeto de javascript a través de websockets:

la faye-websockets documentación dice:

enviar(mensaje) acepta una Cadena o un Tampón y envía un mensaje de texto o mensaje binario a través de la conexión a los otros compañeros.

lado del servidor que estoy usando nodo y faye.

var WebSocket = require('faye-websocket');
var http = require('http');

var server = http.createServer();
server.addListener('upgrade', function(request, socket, head) {
    var ws = new WebSocket(request, socket, head);
    ws.send({topic:'handshake', data:'sdf487rgiuh7'});
});
server.listen(8000);

lado del cliente:

<script>
    var ws = new WebSocket('ws://localhost:8000');
    ws.onmessage = function(e) {
        console.log(e.data); //prints [Object object] string and not the object
    };
</script>

¿cuál es mi error? Gracias

  • que dan -1 explica la razón de por favor..
  • El -1 es probablemente debido al hecho de que el mensaje de error ya le ha dicho exactamente lo que está mal.
InformationsquelleAutor frx08 | 2012-10-23

3 Kommentare

  1. 78

    WebSockets admite el envío y la recepción de: cadenas, matrices (ArrayBuffer) y Notas. Objetos de Javascript debe estar guardado en uno de los anteriores tipos antes de enviar.

    Para enviar un objeto como una cadena, se puede utilizar el grupo builtin soporte JSON:

    ws.send(JSON.stringify(object));

    Para enviar un objeto como un conjunto de tipos puede utilizar un javascript HIJO de la biblioteca, tales como este:

    ws.send(BSON.serialize(object));

    Cuando reciba un WebSocket mensaje que se necesita para deserializar ella.

    Deserializar una cadena JSON desde un WebSocket mensaje:

    ws.onmessage = function (e) {
        var object = JSON.parse(e.data);
        ...
    };

    Si usted está usando binario de mensajes a través de WebSocket, entonces primero debe establecer la binaryType atributo con el fin de recibir todos los mensajes binarios como matrices:

    ws.binaryType = "arraybuffer";

    A continuación, la deserialización tendrá este aspecto:

    ws.onmessage = function (e) {
        var object = BSON.deserialize(e.data);
        ...
    };

    Aquí hay una entrada de blog acerca de utilizando HIJO en Javascript;

    • Su enlace está muerto :/ Y no hay ningún archivo léame.md en el repositorio git de js-hijo. Voy a buscar algo de doc.
    • Es posible que el onmessage de devolución de llamada no devolver la totalidad de la cadena json, y por lo tanto JSON.parse arroja un error de análisis?
    • WebSockets es en función de mensaje y los mensajes son entregados en su totalidad (no parcial de los mensajes). Sin embargo, tenga en cuenta que si usted tiene algo así como websockify en el medio y en realidad estás hablando a un servidor TCP en el otro extremo, el mensaje divisiones son arbitrarias (depende del paquete TCP tamaño, el núcleo tamaños de ventana, el tamaño del buffer, etc). En ese caso, usted necesita para hacer algún tipo de re-ensamblaje de sí mismo.
    • Gracias, pensé que websockets fueron simplemente sockets iniciada a través de http. Es bueno saber que es en función de mensaje.
  2. 2

    Cliente:

    const bson = new BSON();
    ws.binaryType = 'arraybuffer';
    
    ws.onmessage = function(event) {
      console.log(bson.deserialize(Buffer.from(event.data)));
    }

    Servidor:

     const data = bson.serialize({ ... });
     ws.send(data);
  3. 1

    Estoy trabajando básicamente con el Socket.IO, pero parece que tú necesitas para stringify sus datos en el servidor y analizarlo en el cliente como:

    en el servidor:

    ws.send(JSON.stringify({topic:'handshake', data:'sdf487rgiuh7'}));

    en el cliente:

    console.log(JSON.parse(e.data));
    • en el caso de que usted está enviando una cadena pero desde faye admite el envío de datos binarios quiero aprovechar esta característica
    • Un JS objeto binario de datos, una imagen sería. Así udidus respuesta es correcta.
    • así que el único método para serializar un objeto js es stringify es?
    • «Stringifying» un objeto es otra manera de decir «serializar con JSON»

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein