diff --git a/packages/socket.io-adapter/lib/cluster-adapter.ts b/packages/socket.io-adapter/lib/cluster-adapter.ts index c53a48b4be..170bf51b05 100644 --- a/packages/socket.io-adapter/lib/cluster-adapter.ts +++ b/packages/socket.io-adapter/lib/cluster-adapter.ts @@ -438,11 +438,7 @@ export abstract class ClusterAdapter extends Adapter { }); this.addOffsetIfNecessary(packet, opts, offset); } catch (e) { - return debug( - "[%s] error while broadcasting message: %s", - this.uid, - e.message, - ); + debug("[%s] error while broadcasting message: %s", this.uid, e.message); } } diff --git a/packages/socket.io-adapter/test/cluster-adapter.ts b/packages/socket.io-adapter/test/cluster-adapter.ts index 18af8d478e..bfd043c48d 100644 --- a/packages/socket.io-adapter/test/cluster-adapter.ts +++ b/packages/socket.io-adapter/test/cluster-adapter.ts @@ -15,6 +15,7 @@ const NODES_COUNT = 3; class EventEmitterAdapter extends ClusterAdapterWithHeartbeat { private offset = 1; + public shouldFailPublish = false; constructor( nsp, @@ -27,6 +28,9 @@ class EventEmitterAdapter extends ClusterAdapterWithHeartbeat { } protected doPublish(message: ClusterMessage): Promise { + if (this.shouldFailPublish) { + return Promise.reject(new Error("publish failed")); + } this.eventBus.emit("message", message); return Promise.resolve(String(++this.offset)); } @@ -152,6 +156,19 @@ describe("cluster adapter", () => { servers[0].local.emit("test"); }); + it("broadcasts to local clients even when publishAndReturnOffset throws", (done) => { + const adapter = servers[0].of("/").adapter as EventEmitterAdapter; + adapter.shouldFailPublish = true; + + clientSockets[0].on("test", (arg1) => { + expect(arg1).to.eql(1); + adapter.shouldFailPublish = false; + done(); + }); + + servers[0].emit("test", 1); + }); + it("broadcasts with multiple acknowledgements", (done) => { clientSockets[0].on("test", (cb) => cb(1)); clientSockets[1].on("test", (cb) => cb(2));