Skip to content

Commit da2b542

Browse files
perf: precompute the WebSocket frames when broadcasting
Note: - only packets without binary attachments are affected - the permessage-deflate extension must be disabled (which is the default) Related: - socketio/socket.io-adapter@5f7b47d - socketio/engine.io@5e34722
1 parent b7d54db commit da2b542

File tree

4 files changed

+132
-70
lines changed

4 files changed

+132
-70
lines changed

Diff for: package-lock.json

+108-64
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@
4949
"accepts": "~1.3.4",
5050
"base64id": "~2.0.0",
5151
"debug": "~4.3.2",
52-
"engine.io": "~6.2.1",
53-
"socket.io-adapter": "~2.4.0",
52+
"engine.io": "~6.3.1",
53+
"socket.io-adapter": "~2.5.2",
5454
"socket.io-parser": "~4.2.1"
5555
},
5656
"devDependencies": {

Diff for: test/messaging-many.ts

+18
Original file line numberDiff line numberDiff line change
@@ -498,4 +498,22 @@ describe("messaging many", () => {
498498
success(done, io, socket1, socket2, socket3);
499499
});
500500
});
501+
502+
it("should precompute the WebSocket frame when broadcasting", (done) => {
503+
const io = new Server(0);
504+
const socket = createClient(io, "/chat", {
505+
transports: ["websocket"],
506+
});
507+
const partialDone = createPartialDone(2, successFn(done, io, socket));
508+
509+
io.of("/chat").on("connection", (s) => {
510+
s.conn.once("packetCreate", (packet) => {
511+
expect(packet.options.wsPreEncodedFrame).to.be.an(Array);
512+
partialDone();
513+
});
514+
io.of("/chat").compress(false).emit("woot", "hi");
515+
});
516+
517+
socket.on("woot", partialDone);
518+
});
501519
});

Diff for: test/socket.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -731,7 +731,7 @@ describe("socket", () => {
731731
});
732732
});
733733

734-
it("should enable compresion by default", (done) => {
734+
it("should enable compression by default", (done) => {
735735
const io = new Server(0);
736736
const socket = createClient(io, "/chat");
737737

@@ -740,11 +740,11 @@ describe("socket", () => {
740740
expect(packet.options.compress).to.be(true);
741741
success(done, io, socket);
742742
});
743-
io.of("/chat").emit("woot", "hi");
743+
s.emit("woot", "hi");
744744
});
745745
});
746746

747-
it("should disable compresion", (done) => {
747+
it("should disable compression", (done) => {
748748
const io = new Server(0);
749749
const socket = createClient(io, "/chat");
750750

@@ -753,7 +753,7 @@ describe("socket", () => {
753753
expect(packet.options.compress).to.be(false);
754754
success(done, io, socket);
755755
});
756-
io.of("/chat").compress(false).emit("woot", "hi");
756+
s.compress(false).emit("woot", "hi");
757757
});
758758
});
759759

0 commit comments

Comments
 (0)