Start · Sprachen · JavaScript · Referenz · RTCDataChannel.id

RTCDataChannel.id

Eigenschaft

Schreibgeschützte Eigenschaft mit der Kennung (0–65.534), die einen <code>RTCDataChannel</code> innerhalb einer <code>RTCPeerConnection</code> eindeutig identifiziert, oder <code>null</code>.

seit JavaScript Baseline: alle modernen Browser (Chrome 56+, Firef Kategorie: webapi

Signatur

RTCDataChannel.id

Beschreibung

Die Eigenschaft id gibt die numerische Kennung eines RTCDataChannel zurück. Die Kennung entspricht der SCTP-Stream-ID, über die der Kanal intern übertragen wird. Sie ist innerhalb der zugehörigen RTCPeerConnection eindeutig und liegt zwischen 0 und 65534. Der Wert 65535 ist reserviert.

Wie die Kennung zustande kommt, hängt davon ab, wie der Kanal angelegt wurde:

  • Automatische Aushandlung (Standard, negotiated: false): Der Browser vergibt die ID selbst. Das geschieht meist erst, wenn der SCTP-Transport steht, weil die ID von der DTLS-Rolle abhängt. Der DTLS-Client nutzt gerade IDs, der DTLS-Server ungerade. Bis dahin kann id den Wert null haben.
  • Manuelle Aushandlung (negotiated: true): Sie legen die ID beim Aufruf von createDataChannel() über die Option id selbst fest. Beide Seiten müssen einen Kanal mit derselben ID anlegen. Ein datachannel-Ereignis wird dabei nicht ausgelöst.

In der Praxis dient id dazu, mehrere Kanäle einer Verbindung auseinanderzuhalten, zum Beispiel in einer Map, für Logs oder in der Statistik von getStats(). Die Eigenschaft ist schreibgeschützt. Eine ID lässt sich nur beim Anlegen des Kanals festlegen.

Rückgabewert

Typ
number | null
Beschreibung
Eine ganze Zahl zwischen 0 und 65534 (unsigned short). null, solange der Browser bei automatischer Aushandlung noch keine ID vergeben hat.

Beispiele

ID eines automatisch ausgehandelten Kanals auslesen

const pc = new RTCPeerConnection();
const channel = pc.createDataChannel('chat');

// Vor dem Verbindungsaufbau ist oft noch keine ID vergeben
console.log('ID direkt nach dem Anlegen:', channel.id);

channel.addEventListener('open', () => {
  // Spätestens jetzt ist die ID fest vergeben
  console.log(`Kanal "${channel.label}" geöffnet, ID: ${channel.id}`);
});
ID direkt nach dem Anlegen: null Kanal "chat" geöffnet, ID: 0

Manuell ausgehandelter Kanal mit fester ID

// Auf BEIDEN Peers identisch ausführen – kein datachannel-Ereignis nötig
const pc = new RTCPeerConnection();
const control = pc.createDataChannel('control', {
  negotiated: true,
  id: 42
});

console.log(control.id);         // sofort verfügbar
console.log(control.negotiated);
42 true

Mehrere Kanäle über ihre ID verwalten

const pc = new RTCPeerConnection();
const channels = new Map();

pc.addEventListener('datachannel', ({ channel }) => {
  channels.set(channel.id, channel);
  console.log(`Neuer Kanal ${channel.id} (${channel.label})`);

  channel.addEventListener('message', (event) => {
    console.log(`[Kanal ${channel.id}]`, event.data);
  });

  channel.addEventListener('close', () => {
    channels.delete(channel.id);
    console.log(`Kanal ${channel.id} entfernt, offen: ${channels.size}`);
  });
});
Neuer Kanal 1 (file-transfer) [Kanal 1] Hallo Kanal 1 entfernt, offen: 0

// Wichtig · Fallstricke

  • null prüfen: Bei automatisch ausgehandelten Kanälen ist id vor dem Aufbau des SCTP-Transports häufig null. Verwenden Sie die ID als Schlüssel deshalb erst nach dem open-Ereignis oder im datachannel-Ereignis.
  • Kollisionen bei negotiated: true: Ist die ID in der Verbindung schon vergeben, löst createDataChannel() eine OperationError-Ausnahme aus. Liegt sie außerhalb des gültigen Bereichs, also über 65534 oder über dem Grenzwert aus RTCSctpTransport.maxChannels, gibt es einen TypeError. Mischen Sie manuelle IDs nicht wahllos mit automatisch vergebenen. Halten Sie sich am besten an die Gerade/Ungerade-Regel oder verwenden Sie ausschließlich manuelle IDs.
  • Nicht mit label verwechseln: label ist ein frei wählbarer und nicht eindeutiger Name. Eindeutig ist nur id.
  • Wiederverwendung: Nach dem Schließen eines Kanals kann seine ID später für einen neuen Kanal wiederverwendet werden.
  • Kompatibilität: Wird von allen modernen Browsern unterstützt. Ältere Versionen gaben vor der ID-Vergabe teilweise 65535 statt null zurück.