4

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).

3
  • Maybe you want to look at a different data interchange format that has native support for binary data, such as MsgPack. Commented Jun 24, 2016 at 22:05
  • @mpen - webSocket supports binary data. Commented Jun 24, 2016 at 22:36
  • @jfriend00 Right.. I'm saying instead of using JSON.stringify use msgpack.encode. Commented Jun 24, 2016 at 23:21

1 Answer 1

7

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 combine 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);
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.