2016-06-24 9 views
2

Gibt es eine Möglichkeit, Text und Binär in einer Anfrage via Websocket zu senden? Zum Beispiel: Dateinamen (Text) und Dateiinhalt (binär)Senden Sie Text und Binär über Websocket

Ich kann sie als String wie senden:

JSON.stringify({filename: "test.dat", filecontent: data}); 

Aber es ist viel langsamer als nur Dateiinhalt als binäre (Arraybuffer) sendet.

+0

Vielleicht möchten Sie an einem anderen Datenaustauschformat suchen, die native Unterstützung für binäre Daten hat, wie MsgPack. – mpen

+0

@mpen - webSocket unterstützt binäre Daten. – jfriend00

+0

@ jfriend00 Richtig .. Ich sage, anstatt 'JSON.stringify' verwenden' msgpack.encode'. – mpen

Antwort

3

Denken Sie daran, dass die Binärdatei nur codierte Daten ist. Dies ist weniger eine JavaScript-Frage und eher eine Codierungsfrage. So würde ich es machen.

Geben Sie zu Beginn Ihrer Anforderung 32 Bit (eine Ganzzahl) an, um die Bitlänge test.dat anzugeben. Dann kombinieren Sie dies mit Ihren zwei Datenquellen. Ihre Nutzlast wird wie folgt aussehen:

text_length + TEST.DAT AS BINARY + filecontent AS BINARY

dann die Daten als Array-Puffer zurück. Verwenden Sie

textLengthBits = parseInt(arrBuffer.slice(0,32), 2); 

Um die Länge des Textes zu erhalten. Dann wieder schneiden,

textBits = arrBuffer.slice(32, 32 + textLengthBits) 

Um den Text zu bekommen. Die restlichen Bits sind deine Datei.

fileBits = arrBuffer.slice(32 + textLengthBits); 
Verwandte Themen