From bbe94adb822a306c6272e977d394e3e203cae25d Mon Sep 17 00:00:00 2001 From: Damien Arrachequesne Date: Thu, 8 Oct 2020 03:04:49 +0200 Subject: [PATCH] feat: do not reuse the Engine.IO id Related: https://github.com/socketio/socket.io/commit/3b0cb1158ce76275cec0d350f4eb21efbb26e32c --- build/manager.d.ts | 14 -------------- build/manager.js | 26 -------------------------- build/socket.d.ts | 2 +- build/socket.js | 6 ++++-- lib/manager.ts | 28 ---------------------------- lib/socket.ts | 6 ++++-- test/socket.js | 11 +++++++---- test/support/server.js | 10 ++++++++-- 8 files changed, 24 insertions(+), 79 deletions(-) diff --git a/build/manager.d.ts b/build/manager.d.ts index a782bc174..74cac8500 100644 --- a/build/manager.d.ts +++ b/build/manager.d.ts @@ -35,20 +35,6 @@ export declare class Manager extends Emitter { * @api private */ emitAll(event: string, arg?: any): void; - /** - * Update `socket.id` of all sockets - * - * @api private - */ - updateSocketIds(): void; - /** - * generate `socket.id` for the given `nsp` - * - * @param {String} nsp - * @return {String} - * @api private - */ - generateId(nsp: any): string; /** * Sets the `reconnection` config. * diff --git a/build/manager.js b/build/manager.js index e7212940e..0ae33dac1 100644 --- a/build/manager.js +++ b/build/manager.js @@ -91,28 +91,6 @@ class Manager extends component_emitter_1.default { } } } - /** - * Update `socket.id` of all sockets - * - * @api private - */ - updateSocketIds() { - for (let nsp in this.nsps) { - if (has.call(this.nsps, nsp)) { - this.nsps[nsp].id = this.generateId(nsp); - } - } - } - /** - * generate `socket.id` for the given `nsp` - * - * @param {String} nsp - * @return {String} - * @api private - */ - generateId(nsp) { - return (nsp === "/" ? "" : nsp + "#") + this.engine.id; - } /** * Sets the `reconnection` config. * @@ -386,9 +364,6 @@ class Manager extends component_emitter_1.default { this.nsps[nsp] = socket; var self = this; socket.on("connecting", onConnecting); - socket.on("connect", function () { - socket.id = self.generateId(nsp); - }); if (this.autoConnect) { // manually call here since connecting event is fired before listening onConnecting(); @@ -572,7 +547,6 @@ class Manager extends component_emitter_1.default { const attempt = this.backoff.attempts; this.reconnecting = false; this.backoff.reset(); - this.updateSocketIds(); this.emitAll("reconnect", attempt); } } diff --git a/build/socket.d.ts b/build/socket.d.ts index 1d7dd7c72..743e100f9 100644 --- a/build/socket.d.ts +++ b/build/socket.d.ts @@ -100,7 +100,7 @@ export declare class Socket extends Emitter { * * @api private */ - onconnect(): void; + onconnect(id: string): void; /** * Emit buffered events (received and emitted). * diff --git a/build/socket.js b/build/socket.js index ba49abd67..2ca1d5805 100644 --- a/build/socket.js +++ b/build/socket.js @@ -203,7 +203,8 @@ class Socket extends component_emitter_1.default { return; switch (packet.type) { case socket_io_parser_1.PacketType.CONNECT: - this.onconnect(); + const id = packet.data.sid; + this.onconnect(id); break; case socket_io_parser_1.PacketType.EVENT: this.onevent(packet); @@ -289,7 +290,8 @@ class Socket extends component_emitter_1.default { * * @api private */ - onconnect() { + onconnect(id) { + this.id = id; this.connected = true; this.disconnected = false; this.emit("connect"); diff --git a/lib/manager.ts b/lib/manager.ts index 95b4afb05..60b657db9 100644 --- a/lib/manager.ts +++ b/lib/manager.ts @@ -93,30 +93,6 @@ export class Manager extends Emitter { } } - /** - * Update `socket.id` of all sockets - * - * @api private - */ - updateSocketIds() { - for (let nsp in this.nsps) { - if (has.call(this.nsps, nsp)) { - this.nsps[nsp].id = this.generateId(nsp); - } - } - } - - /** - * generate `socket.id` for the given `nsp` - * - * @param {String} nsp - * @return {String} - * @api private - */ - generateId(nsp) { - return (nsp === "/" ? "" : nsp + "#") + this.engine.id; - } - /** * Sets the `reconnection` config. * @@ -417,9 +393,6 @@ export class Manager extends Emitter { this.nsps[nsp] = socket; var self = this; socket.on("connecting", onConnecting); - socket.on("connect", function () { - socket.id = self.generateId(nsp); - }); if (this.autoConnect) { // manually call here since connecting event is fired before listening @@ -618,7 +591,6 @@ export class Manager extends Emitter { const attempt = this.backoff.attempts; this.reconnecting = false; this.backoff.reset(); - this.updateSocketIds(); this.emitAll("reconnect", attempt); } } diff --git a/lib/socket.ts b/lib/socket.ts index d3b09c51d..c525b0b1b 100644 --- a/lib/socket.ts +++ b/lib/socket.ts @@ -223,7 +223,8 @@ export class Socket extends Emitter { switch (packet.type) { case PacketType.CONNECT: - this.onconnect(); + const id = packet.data.sid; + this.onconnect(id); break; case PacketType.EVENT: @@ -319,7 +320,8 @@ export class Socket extends Emitter { * * @api private */ - onconnect() { + onconnect(id: string) { + this.id = id; this.connected = true; this.disconnected = false; this.emit("connect"); diff --git a/test/socket.js b/test/socket.js index 803215c5a..5d523300d 100644 --- a/test/socket.js +++ b/test/socket.js @@ -6,9 +6,11 @@ describe("socket", function () { it("should have an accessible socket id equal to the server-side socket id (default namespace)", (done) => { const socket = io({ forceNew: true }); - socket.on("connect", () => { + + socket.emit("getId", (id) => { expect(socket.id).to.be.ok(); - expect(socket.id).to.eql(socket.io.engine.id); + expect(socket.id).to.be.eql(id); + expect(socket.id).to.not.eql(socket.io.engine.id); socket.disconnect(); done(); }); @@ -16,9 +18,10 @@ describe("socket", function () { it("should have an accessible socket id equal to the server-side socket id (custom namespace)", (done) => { const socket = io("/foo", { forceNew: true }); - socket.on("connect", () => { + socket.emit("getId", (id) => { expect(socket.id).to.be.ok(); - expect(socket.id).to.eql("/foo#" + socket.io.engine.id); + expect(socket.id).to.be.eql(id); + expect(socket.id).to.not.eql(socket.io.engine.id); socket.disconnect(); done(); }); diff --git a/test/support/server.js b/test/support/server.js index 1c1671a21..72af7bd96 100644 --- a/test/support/server.js +++ b/test/support/server.js @@ -4,8 +4,10 @@ const io = require("socket.io"); const server = io(process.env.ZUUL_PORT || 3210, { pingInterval: 2000 }); const expect = require("expect.js"); -server.of("/foo").on("connection", () => { - // register namespace +server.of("/foo").on("connection", (socket) => { + socket.on("getId", (cb) => { + cb(socket.id); + }); }); server.of("/timeout_socket").on("connection", () => { @@ -145,4 +147,8 @@ server.on("connection", (socket) => { socket.on("getHandshake", (cb) => { cb(socket.handshake); }); + + socket.on("getId", (cb) => { + cb(socket.id); + }); });