Is there any way to send text and binary in one request via websocket? For example: file name (text) and file content (binary)
I can send them as string like:
JSON.stringify({filename: "test.dat", filecontent: data});
But it is a lot slower than sending only file content as binary (arraybuffer).
Is there any way to send text and binary in one request via websocket? For example: file name (text) and file content (binary)
I can send them as string like:
JSON.stringify({filename: "test.dat", filecontent: data});
But it is a lot slower than sending only file content as binary (arraybuffer).
JSON.stringify
use msgpack.encode
.
– mpen
Commented
Jun 24, 2016 at 23:21
Remember that binary is just encoded data. This is less a JavaScript question and more an encoding question. Here's how I would do it.
Set aside 32 bits (representing one integer) at the beginning of your request to specify the bit length of test.dat
. Then bine this with your two data sources. Your payload will look like this:
TEXT_LENGTH + TEST.DAT AS BINARY + FILECONTENT AS BINARY
Then get back the data as an array buffer. Use
textLengthBits = parseInt(arrBuffer.slice(0,32), 2);
To get the length of the text. Then slice again,
textBits = arrBuffer.slice(32, 32 + textLengthBits)
To get the text. The remaining bits are your file.
fileBits = arrBuffer.slice(32 + textLengthBits);