Wie konvertiert javascript-array zu Binärdaten und zurück für websocket?

Will ich senden Sie diese Beispiel-array

[{
    id: 1,
    name: "test",
    position: [1234,850], //random position on the map
    points: 100 //example points
}];

meiner websocket-server als binäre Daten. Auf server-Seite möchte ich entschlüsseln, dass binäre Daten wieder in ein array, änderungen und zurück zu senden von binären Daten an den client. Und schließlich auf der client-Seite, wie zum Dekodieren von binären Daten wieder in ein array?

Screenshot-Beispiel, was ich meine:

Wie konvertiert javascript-array zu Binärdaten und zurück für websocket?

Dies ist meine aktuelle code:

var connection = new WebSocket('wss://my_website.eu:1234');
connection.binaryType = "ArrayBuffer";
connection.onmessage = function (event) {

    //console.log(event);
    if (event.data instanceof window["ArrayBuffer"]) {
        var data3 = JSON.parse(String.fromCharCode.apply(null, new Uint16Array(event.data)));
        console.log(data3);
    } else {
        console.log(event.data); //Blob {size: 0, type: ""}
    }
};

$("body").mousemove(function( event ) {

    var data = {
        name: "lol",
        pos: [event.pageX, event.pageY]
    };

    //convert to binary frame
    var data2 = new Uint16Array(data);
    console.log(data2); //[]

    //try to convert back to array
    var data3 = String.fromCharCode.apply(null, new Uint16Array(data2));
    console.log(data3); //empty

    connection.send(data2); //Binary Frame (Opcode 2, mask) | length: 0

});

Server-side-code:

connection.on('message', function(message) {
    for (var i = players.length - 1; i >= 0; i--) {
        players[i].connection.send(message.binaryData);
    }
});

NEUESTEN BEARBEITEN, LESEN SIE HIER

Kann ich das jetzt Nachricht senden wie binären frame mit der websocket-server. Ich fand Funktionen zu convert string to binary geben und senden Sie es an ws-server.

Nun habe ich problem. Diese Funktionen (siehe unten) funktioniert nicht auf server-Seite. Beispiel-code:

var data = {
    name: "value"
};

connection.send(JSON.stringify(data));

Dieser code funktioniert gut. Wenn ich jetzt versuche, zu senden, wie array-Puffer:

var data = {
    name: "value"
};

connection.send(StringToArrayBuffer(JSON.stringify(data)));

Ausgang ist nicht Binär-frame, ist nur string "[object ArrayBuffer]":

Wie konvertiert javascript-array zu Binärdaten und zurück für websocket?

Ich auch versucht:

connection.send(JSON.stringify(data), {binary: true, mask: false});

aber das senden von Nachrichten als normale string -, nicht binäre Rahmen.

So, wie kann ich senden, Binären Rahmen von websocket-server auf den client? Wenn ich senden Sie zurück erhalten binäre Nachricht:

connection.on('message', function(message) {
    for (var i = players.length - 1; i >= 0; i--) {
        playerConnection[i].send(message.binaryData);
    }
}

nur diese funktioniert.

  • mögliche Duplikate von stackoverflow.com/questions/6965107/...
  • Habe ich getestet, die funktioniert, und ich habe Fehler. Ich kann nicht analysieren returded JSON-string aus ab2str(). Immer Fehler [SyntaxError: Unexpected token ]
InformationsquelleAutor Dave | 2016-09-27
Schreibe einen Kommentar