Guide des WebSockets pour les débutants

Salut à toi, futur développeur web ! Aujourd'hui, on va plonger dans le monde passionnant des WebSockets. Ne t'inquiète pas si tu n'en as jamais entendu parler auparavant – d'ici la fin de ce tutoriel, tu seras un mage WebSocket ! Alors, prends ta boisson favorite, installe-toi confortablement, et c'est parti pour notre aventure.

HTML - WebSocket

Qu'est-ce que les WebSockets ?

Avant de rentrer dans les détails, comprensons ce qu'est WebSocket et pourquoi c'est si génial. Imagine que tu as une conversation avec un ami. Dans un appel téléphonique normal, tu dois composer, attendre qu'il décroche, dire ce que tu veux, puis raccrocher. Si tu veux reparler, tu répètes tout le processus. Ça paraît fastidieux, n'est-ce pas ?

Eh bien, c'est ainsi que fonctionne la communication web traditionnelle. Ton navigateur envoie une requête, attend une réponse, puis ferme la connexion. Les WebSockets, quant à eux, sont comme avoir une ligne téléphonique ouverte où tu et ton ami pouvez parler whenever vous le souhaitez, sans avoir constamment à composer et à raccrocher. Génial, non ?

Syntaxe

Maintenant, voyons comment nous utilisons réellement les WebSockets dans notre HTML. La syntaxe est étonnamment simple :

<script>
var socket = new WebSocket('ws://example.com/socket');
</script>

Ici, nous créons un nouvel objet WebSocket et nous le connectons à un serveur à l'adresse 'ws://example.com/socket'. La partie 'ws://' est comme 'http://' mais spécifiquement pour les WebSockets. Il y a aussi une version sécurisée, 'wss://', tout comme 'https://'.

Attributs de WebSocket

Les WebSockets possèdent quelques attributs pratiques qui nous informent sur l'état actuel de notre connexion. Jetons un œil à ces attributs dans un tableau :

Attribut Description
readyState L'état actuel de la connexion
bufferedAmount Le nombre d'octets de données mises en file d'attente à l'aide de la méthode send()
extensions Les extensions sélectionnées par le serveur
protocol Le nom du sous-protocole sélectionné par le serveur

L'attribut readyState est particulièrement utile. Il peut prendre quatre valeurs :

  1. 0 (CONNECTING) : La connexion n'est pas encore ouverte.
  2. 1 (OPEN) : La connexion est ouverte et prête à communiquer.
  3. 2 (CLOSING) : La connexion est en cours de fermeture.
  4. 3 (CLOSED) : La connexion est fermée ou n'a pas pu être ouverte.

Événements WebSocket

Les WebSockets ne sont pas seulement utilisés pour envoyer des données – ils peuvent également répondre à divers événements. C'est comme installer des paillettes de fête qui éclatent lorsqu'il se passe quelque chose de spécifique ! Voici les événements principaux :

  1. onopen : Se déclenche lorsque la connexion est établie.
  2. onmessage : Se déclenche lorsque des données sont reçues du serveur.
  3. onerror : Se déclenche lorsqu'une erreur se produit.
  4. onclose : Se déclenche lorsque la connexion est fermée.

Voyons comment les utiliser dans le code :

<script>
var socket = new WebSocket('ws://example.com/socket');

socket.onopen = function(event) {
console.log('Connexion établie !');
};

socket.onmessage = function(event) {
console.log('Message du serveur:', event.data);
};

socket.onerror = function(error) {
console.log('Erreur WebSocket:', error);
};

socket.onclose = function(event) {
console.log('Connexion fermée.');
};
</script>

Dans cet exemple, nous configurons des fonctions pour gérer chacun de ces événements. Lorsque la connexion s'ouvre, nous enregistrons un message. Lorsque nous recevons un message, nous l'enregistrons. Si une erreur se produit, nous l'enregistrons également. Et lorsque la connexion se ferme, nous disons au revoir !

Méthodes WebSocket

Maintenant que nous savons écouter les événements, voyons comment nous pouvons agir avec notre WebSocket. Voici les principales méthodes :

Méthode Description
send() Envoie des données au serveur
close() Ferme la connexion WebSocket

Voici comment nous utilisons ces méthodes :

<script>
var socket = new WebSocket('ws://example.com/socket');

// Envoi d'un message au serveur
socket.send('Bonjour, Serveur !');

// Fermeture de la connexion
socket.close();
</script>

C'est simple ! Avec send(), nous pouvons envoyer n'importe quelles données que nous voulons au serveur. Et lorsque nous avons terminé, nous pouvons poliment fermer la connexion avec close().

Configuration du serveur WebSocket avec Python

Je sais que nous nous concentrons sur l'HTML ici, mais je pense qu'il est important de comprendre les deux côtés de la conversation. Alors, penchons-nous rapidement sur la manière de configurer un simple serveur WebSocket en utilisant Python. Ne t'inquiète pas si tu ne connais pas Python – l'important ici, c'est le concept.

import asyncio
import websockets

async def echo(websocket, path):
async for message in websocket:
await websocket.send(f"Echo: {message}")

start_server = websockets.serve(echo, "localhost", 8765)

asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

Ce serveur simplement renvoie tout message qu'il reçoit, préfixé par "Echo: ". Il fonctionne sur localhost (ton propre ordinateur) sur le port 8765.

Configuration du client HTML pour le serveur

Maintenant que nous avons notre serveur, créons une page HTML qui s'y connecte :

<!DOCTYPE html>
<html>
<head>
<title>Test WebSocket</title>
</head>
<body>
<h1>Test WebSocket</h1>
<input type="text" id="messageInput" placeholder="Entrez un message">
<button onclick="sendMessage()">Envoyer</button>
<div id="messages"></div>

<script>
var socket = new WebSocket('ws://localhost:8765');

socket.onopen = function(event) {
console.log('Connexion établie !');
};

socket.onmessage = function(event) {
var messages = document.getElementById('messages');
messages.innerHTML += '<p>' + event.data + '</p>';
};

function sendMessage() {
var input = document.getElementById('messageInput');
socket.send(input.value);
input.value = '';
}
</script>
</body>
</html>

Cette page HTML crée une interface simple où tu peux taper un message, l'envoyer au serveur, et voir la réponse écho.

Et voilà ! Nous avons couvert les bases des WebSockets, de la compréhension de ce qu'elles sont, à la configuration d'un serveur et à la création d'un client. Souviens-toi, les WebSockets sont tout au sujet de la communication en temps réel et bidirectionnelle. Elles sont parfaites pour des applications comme les salons de discussion, les mises à jour sportives en direct, ou n'importe quelle situation où tu as besoin d'un échange de données instantané.

Alors, continue ton chemin dans le développement web, tu découvriras que les WebSockets ouvrent une nouvelle monde de possibilités. Continue à pratiquer, à expérimenter, et surtout, continue à t'amuser ! Bon codage !

Credits: Image by storyset