fix(network): one non-open data channel aborts a UDP broadcast for every client

Offen Anfängerfreundlich
#483 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Anfängerfreundlichkeit
82/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Aktiv
Tech-Stack
typescript
Bereich
networking

Rechercherichtung

Lies modules/network/src/server/udp.server.network.ts ungefähr in den Zeilen 244–248 und 402–407 und vergleiche dann die Behandlung beim Senden mit PeerHost.send in peer-host.ts:203. Prüfe, wie die Iteration über Empfänger reagiert, wenn ein Datenkanal nicht geöffnet ist oder ein Sendevorgang einen Fehler auslöst. Fertig ist die Aufgabe, wenn der Zustand des Kanals oder ein Sendefehler bei einem Empfänger Broadcasts an spätere Clients nicht verhindert; führe die relevanten Netzwerktests aus.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

bug modules:network
Which package is this bug report for?

network

Issue description

The channel state is put into _clients in ondatachannel, before onopen. send calls channel.send with no readyState check, so an InvalidStateError (or an oversize SCTP message) escapes forEach: while one client connects or disconnects, every later client misses the broadcast and the error reaches the game loop. PeerHost.send (peer-host.ts:203) checks readyState.

Where:

Evidence:

this._clients.forEach((channels) => { const state = channels.get(channel); if (state) this.send(state, data); });
private send(state, data) { state.channel.send(state.sequencer ? state.sequencer.wrap(data) : data); }

Suggested fix: Skip channels that are not "open", and catch and log send errors per recipient.

Found during a code audit of main at be72076.

Code sample

No response

Versions
  • Engine main at be72076
  • pnpm 12.0.0, Node.js 26, Bun 1.3.14
Issue priority

Medium (should be fixed soon)

I have tested this issue on a development release

be72076

Vorherrschende Sprache
TypeScript
Sterne
7
Forks
2
Ø Merge
1 T. 17 Std.
Gemergte PRs (30 T.)
17

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus NanoForge-dev/Engine

Alle Issues in NanoForge-dev/Engine

Ähnliche Issues

Weitere Issues zu TypeScript

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.