Discussion en temps réel via des canaux de données
Mettez en œuvre une fonctionnalité de discussion en temps réel reposant sur les canaux de données WebRTC pour permettre une communication textuelle directe et à faible latence entre les pairs.
Discussion en temps réel via des canaux de données est une leçon Real-Time Streaming Systems (WebRTC + Live Data) gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Real-Time Streaming Systems (WebRTC + Live Data), et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Real-Time Streaming Systems (WebRTC + Live Data) comprend 4 leçons au total.
Certaines parties de cette leçon n'ont pas encore été traduites et s'affichent en anglais.
Real-time Chat with WebRTC
Imagine adding instant messaging directly into your video calls or collaborative apps! WebRTC Data Channels make this possible, offering a powerful way to send text and other data directly between peers.
In this lesson, you'll learn how to implement a real-time chat feature using these low-latency, secure channels.
Data Channels' Chat Advantage
Why use WebRTC Data Channels for chat instead of a traditional server-based approach?
- Low Latency: Messages travel directly between users, minimizing delays.
- Enhanced Privacy: Your chat content doesn't pass through an intermediary server.
- Flexible Data: Beyond text, you can send binary data, game states, or any custom information.
It creates a true peer-to-peer chat experience.
Creating Your Chat Channel
To start a chat, you first create an RTCDataChannel from an established RTCPeerConnection. You give it a label (like "chat") and can specify options for how it behaves.
For text chat, ordered: true is often desired to ensure messages arrive in the correct sequence.
const peerConnection = new RTCPeerConnection();
const chatChannel = peerConnection.createDataChannel("chat", {
ordered: true, // Guarantees message order
maxRetransmits: 0 // Optional: For faster, less reliable delivery
});
// The channel is now 'connecting'When Is The Channel Ready?
A data channel isn't immediately ready to send messages. It goes through different readyState values: connecting, open, closing, and closed.
You must wait for the open state before you can reliably send chat messages. The onopen event is perfect for this.
chatChannel.onopen = (event) => {
console.log("Chat channel is OPEN!");
// Now you can start sending messages
document.getElementById("chat-input").disabled = false;
};
chatChannel.onclose = (event) => {
console.log("Chat channel is CLOSED.");
// Handle channel closure, e.g., disable chat input
document.getElementById("chat-input").disabled = true;
};Sending a Text Message
Once your chatChannel is open, sending a message is straightforward using the send() method. For text chat, you'll typically send a JavaScript string.
Always check the readyState before attempting to send!
// Assuming 'chatChannel' is your open data channel
const message = "Hello from CoddyKit!";
if (chatChannel && chatChannel.readyState === "open") {
chatChannel.send(message);
console.log("Message sent:", message);
} else {
console.warn("Chat channel not open yet. Cannot send message.");
}Handling Incoming Chat
To receive messages from the other peer, you'll attach an onmessage event listener to your chatChannel. When a message arrives, this function is called.
The message content is available in event.data.
chatChannel.onmessage = (event) => {
const receivedMessage = event.data;
console.log("Received message:", receivedMessage);
// Here, you would update your chat display area
// E.g., add a new <li> element to a <ul>
// document.getElementById("chat-history").innerHTML += `<p>${receivedMessage}</p>`;
};Structuring Chat Data (JSON)
For a richer chat experience, you often need more than just raw text. You might want to include the sender's name, a timestamp, or other metadata.
Sending a JSON string allows you to encapsulate structured data. You stringify it before sending and parse it upon receiving.
const messageObject = {
sender: "Alice",
text: "Hey, how are you?",
timestamp: Date.now()
};
const jsonMessage = JSON.stringify(messageObject);
// To send:
// chatChannel.send(jsonMessage);
// To receive and process:
// const parsedMessage = JSON.parse(event.data);
// console.log(`${parsedMessage.sender} said: ${parsedMessage.text}`);Integrating with Your Chat UI
Once you receive a message (especially a structured JSON message), you'll want to display it neatly in your application's user interface.
Typically, your onmessage handler will take the received data, format it (e.g., "Alice: Hello!"), and append it to a designated chat history element (like a div or ul).
What Happens When Chat Ends?
Data channels can close for various reasons: a peer disconnects, the connection fails, or one side explicitly closes it. The onclose event will fire, and the channel's readyState will become closed.
It's good practice to update your UI (e.g., disable the chat input, show a "disconnected" message) when this happens.
chatChannel.onclose = (event) => {
console.log("Chat channel closed unexpectedly!");
// Update UI to reflect disconnected state
document.getElementById("chat-input").disabled = true;
document.getElementById("status-message").textContent = "Chat disconnected.";
};Chat Channel Quick Check
You're building a WebRTC chat application and want to ensure that messages arrive at the recipient in the exact order they were sent. Which RTCDataChannel option should you use?
Chat Over Data Channels - Recap
Congratulations! You've learned how to implement a real-time chat feature using WebRTC Data Channels.
- P2P Communication: Data Channels enable direct, low-latency, and private chat.
- Channel Lifecycle: Create with
createDataChannel(), wait foronopen, then usesend()and listen withonmessage. - Structured Data: Use JSON to send richer chat messages with metadata.
- Robustness: Handle channel states and closures for a better user experience.
You can now integrate powerful real-time chat into your WebRTC applications!
Questions Fréquemment Posées
La leçon « Discussion en temps réel via des canaux de données » est-elle gratuite ?
Oui — le texte complet de « Discussion en temps réel via des canaux de données » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Real-Time Streaming Systems (WebRTC + Live Data), passe à CoddyKit PRO. Le cours Real-Time Streaming Systems (WebRTC + Live Data) comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Discussion en temps réel via des canaux de données » ?
Mettez en œuvre une fonctionnalité de discussion en temps réel reposant sur les canaux de données WebRTC pour permettre une communication textuelle directe et à faible latence entre les pairs. Tu pratiques Real-Time Streaming Systems (WebRTC + Live Data) avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Real-Time Streaming Systems (WebRTC + Live Data) ?
Aucune expérience préalable n'est requise. Real-Time Streaming Systems (WebRTC + Live Data) sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.
Combien de temps prend la leçon « Discussion en temps réel via des canaux de données » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Real-Time Streaming Systems (WebRTC + Live Data) ?
Oui. Chaque leçon Real-Time Streaming Systems (WebRTC + Live Data) inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Synchroniser les métadonnées WebRTC
- Discussion en temps réel via des canaux de données
- Partager l’état de l’application en direct
- Transfert de fichiers via les canaux de données WebRTC