Skip to content

fix(socket.io): Deduplicate disconnect listener in bindMessageHandlers#16742

Open
fru1tworld wants to merge 2 commits intonestjs:masterfrom
fru1tworld:fix/deduplicate-disconnect-listener
Open

fix(socket.io): Deduplicate disconnect listener in bindMessageHandlers#16742
fru1tworld wants to merge 2 commits intonestjs:masterfrom
fru1tworld:fix/deduplicate-disconnect-listener

Conversation

@fru1tworld
Copy link
Copy Markdown

Summary

Cache the disconnect$ observable per socket using a WeakMap so that multiple gateways sharing the same Socket.IO server register only one disconnect listener per client socket instead of one per gateway.

Changes

  • Added a WeakMap<Socket, Observable> to IoAdapter to cache disconnect$ per socket.
  • bindMessageHandlers now reuses the cached observable on subsequent calls for the same socket.
  • Added unit test verifying a single disconnect listener is registered regardless of call count.

Manual test / verification

  • npm run test — all 2003 unit tests passing.
  • npx prettier --check — formatting OK.
  • npm run lint:packages — no errors.

Fixes #7249

@coveralls
Copy link
Copy Markdown

coveralls commented Apr 9, 2026

Coverage Report for CI Build 26

Coverage remained the same at 89.907%

Details

  • Coverage remained the same as the base build.
  • Patch coverage: No coverable lines changed in this PR.
  • No coverage regressions found.

Uncovered Changes

No uncovered changes found.

Coverage Regressions

No coverage regressions found.


Coverage Stats

Coverage Status
Relevant Lines: 8461
Covered Lines: 7607
Line Coverage: 89.91%
Relevant Branches: 2859
Covered Branches: 2316
Branch Coverage: 81.01%
Branches in Coverage %: No
Coverage Strength: 21.18 hits per line

💛 - Coveralls

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.

Multiple gateways with socket.io get (disconnect listeners added to [Socket])

2 participants