Skip to content

Conversation

@kevin-roark
Copy link

Summary:
Added binary support to broadcasting by adding a binary check to namespace.js and pre-encoding events in adapter.js.

Question:
I think the pre-encoding stuff in adapter (and the new parameter in client.js) is relatively clean, but it could possibly be better. I was thinking of checking if packet is an array (it is post-encoding) or an object (pre-encoding) rather than passing the "preEncoded" flag, but let me know what you think.

The commit message:
lib/namespace.js previously was not considering whether an event had
binary data and was giving all events parser.EVENT type -- now it uses
the has-binary-data module to set the event type appropriately.

Then, after this fix there was a problem with lib/adapter.js -- because
socket.io-parser modifies the packet object in its encoding, the sockets
after the 1st in a broadcast were not getting the correct data. To fix
this, the data is encoded once in adapter, and then the encoded data
is passed to each of the sockets.

lib/socket.js and lib/client.js were updated to allow for the above. The
.packet method of each now takes an optional second "preEncoded" parameter
-- if this is true, then client skips the encoding and just writes the
packet argument directly to engine.

test/socket.io.js was updated to add two new tests that test
multi-messaging of events with binary data.

lib/namespace.js previously was not considering whether an event had
binary data and was giving all events parser.EVENT type -- now it uses
the has-binary-data module to set the event type appropriately.

Then, after this fix there was a problem with lib/adapter.js -- because
socket.io-parser modifies the packet object in its encoding, the sockets
after the 1st in a broadcast were not getting the correct data. To fix
this, the data is encoded once in adapter, and then the encoded data
is passed to each of the sockets.

lib/socket.js and lib/client.js were updated to allow for the above. The
.packet method of each now takes an optional second "preEncoded" parameter
-- if this is true, then client skips the encoding and just writes the
packet argument directly to engine.

test/socket.io.js was updated to add two new tests that test
multi-messaging of events with binary data.
rauchg added a commit that referenced this pull request Mar 3, 2014
Added binary support to broadcasting of events
@rauchg rauchg merged commit 5e28161 into socketio:master Mar 3, 2014
@kevin-roark kevin-roark deleted the add/binary-broadcasting branch March 3, 2014 20:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants