almessadi.
Retour à l'index

Canaux de données WebRTC au-delà des appels vidéo_

RTCDataChannel permet le transport de navigateur à navigateur, mais les déploiements réels nécessitent toujours un signalement, TURN et une vue réaliste de l'endroit où le pair-à-pair échoue.

Publié20 avril 2024
Temps de lecture9 min read

WebRTC est souvent considéré comme une technologie de visioconférence avec quelques API supplémentaires.

Cela laisse de côté l'une de ses capacités les plus intéressantes : RTCDataChannel.

Les canaux de données permettent aux navigateurs d'échanger des données d'application arbitraires via la même infrastructure pair-à-pair que WebRTC utilise pour les médias. Cela ouvre la porte à :

  • outils de collaboration
  • multijoueur navigateur
  • transfert de fichiers assisté par les pairs
  • synchronisation locale en premier à faible latence

Ce que le Peer-to-Peer vous apporte réellement

L'attrait principal n'est pas idéologique. C'est architectural.

Si deux navigateurs peuvent échanger des données directement, vous réduisez la quantité de trafic qui doit transiter par votre propre infrastructure backend. Cela peut diminuer :

  • la bande passante serveur
  • les coûts de relais
  • les goulets d'étranglement centraux

Mais cela ne se produit que lorsque un chemin direct est possible.

Les éléments que les gens négligent

Un déploiement WebRTC réel nécessite toujours :

  • signalement
  • échange de candidats ICE
  • STUN pour la découverte de réseau
  • TURN pour un relais de secours lorsque la connectivité directe échoue

Cela signifie qu'un système WebRTC n'est pas "sans serveur". Il est "pas toujours relayé par le serveur de votre application."

TURN est particulièrement important car de nombreux utilisateurs réels se trouvent derrière des conditions de NAT ou de pare-feu qui empêchent une connectivité pair-à-pair propre.

Une forme minimale

La configuration côté navigateur ressemble généralement à ceci :

const pc = new RTCPeerConnection({
  iceServers: [{ urls: "stun:stun.l.google.com:19302" }],
});

const channel = pc.createDataChannel("sync");

channel.onmessage = (event) => {
  console.log("reçu", event.data);
};

Ensuite, le reste du travail consiste en signalement : offres, réponses et candidats ICE.

Ce chemin de signalement est spécifique à l'application. WebRTC ne vous le fournit pas.

Où les canaux de données s'intègrent bien

Ils sont bien adaptés lorsque :

  • la latence est importante
  • les pairs échangent un état transitoire
  • le produit fonctionne toujours si certaines sessions transitent par TURN

Ils ne sont pas adaptés lorsque :

  • chaque transfert doit être audité de manière centrale
  • le stockage hors ligne et la capacité de reprendre compte plus que le transport en direct
  • le modèle commercial ne peut pas tolérer d'infrastructure de relais de toute façon

Pour la livraison de gros fichiers, le pair-à-pair semble attrayant, mais la capacité de reprise, la persistance et les attentes multi-appareils poussent souvent les équipes à revenir vers le stockage d'objets.

Donc, la réponse honnête est : les canaux de données WebRTC sont puissants, mais ne constituent pas un remplacement global pour le transport médié par le serveur.

Lectures complémentaires