Edge Computing with Cloudflare Workers & Deno · Leçon

WebSockets et temps réel

Implémentez des applications en temps réel avec Cloudflare Workers et WebSockets pour des expériences interactives.

Leçon 1 sur 411 étapes

WebSockets et temps réel est une leçon Edge Computing with Cloudflare Workers & Deno gratuite sur CoddyKit. Ceci est la leçon 1 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 Edge Computing with Cloudflare Workers & Deno, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Edge Computing with Cloudflare Workers & Deno 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 Apps with WebSockets

What are WebSockets? They enable real-time, two-way communication between a client (like your browser) and a server. Unlike traditional HTTP requests, WebSockets keep a persistent connection open.

This is perfect for applications needing instant updates, like chat apps, live dashboards, or online games.

HTTP vs. WebSocket Connection

Traditional HTTP is stateless and request-response based. Each action needs a new request from the client.

WebSockets, however, establish a single, long-lived connection. Once open, both client and server can send messages anytime without waiting for a request.

  • HTTP: Client requests, server responds, connection closes.
  • WebSocket: Client requests upgrade, server approves, connection stays open.

The WebSocket Upgrade

Before a WebSocket connection is established, an initial HTTP request is made. The client sends an "Upgrade" header, indicating its desire to switch protocols.

If the server supports WebSockets, it responds with an "101 Switching Protocols" status code, upgrading the connection from HTTP to WebSocket protocol. This is known as the WebSocket Handshake.

Cloudflare Workers & WebSockets

Cloudflare Workers are ideal for handling WebSockets at the edge. They can act as the server endpoint, managing connections and processing real-time messages directly where your users are.

Workers provide a WebSocketPair API to easily upgrade an incoming HTTP request into a WebSocket connection, simplifying the handshake process.

Worker WebSocket Upgrade

Let's create a Worker that accepts an incoming WebSocket connection. We'll use new WebSocketPair() to manage the connection.

Try running this example. To test, you'd typically connect using a WebSocket client (e.g., a browser's developer console or a dedicated tool).

export default {
  async fetch(request) {
    const upgradeHeader = request.headers.get('Upgrade');
    if (!upgradeHeader || upgradeHeader !== 'websocket') {
      return new Response('Expected Upgrade: websocket', { status: 426 });
    }

    const { 0: client, 1: server } = new WebSocketPair();

    server.accept(); // Accept the WebSocket connection

    server.addEventListener('message', event => {
      console.log('Received message:', event.data);
      // We'll add logic to send messages back soon!
    });
    server.addEventListener('close', event => {
      console.log('WebSocket closed:', event.code, event.reason);
    });
    server.addEventListener('error', event => {
      console.error('WebSocket error:', event.message);
    });

    return new Response(null, {
      status: 101,
      webSocket: client,
    });
  },
};

WebSocket Event Listeners

Once a WebSocket connection is established, you can listen for various events on the server-side WebSocket object:

  • 'open': Connection successfully established.
  • 'message': A message is received from the client. The message data is in event.data.
  • 'close': The connection is closed by either side.
  • 'error': An error occurred on the connection.

These allow your Worker to react dynamically to client interactions.

Echoing Messages

In the previous code, we added an event listener for 'message'. Let's extend it to ensure the Worker echoes back any message it receives.

The server.send(message) method allows the Worker to send data back to the connected client. This creates a simple "echo" server.

export default {
  async fetch(request) {
    const upgradeHeader = request.headers.get('Upgrade');
    if (!upgradeHeader || upgradeHeader !== 'websocket') {
      return new Response('Expected Upgrade: websocket', { status: 426 });
    }

    const { 0: client, 1: server } = new WebSocketPair();

    server.accept();
    server.addEventListener('message', event => {
      const message = event.data;
      console.log('Received message:', message);
      // Echo the message back to the client
      server.send(`Echo from Worker: ${message}`);
    });
    server.addEventListener('close', event => {
      console.log('WebSocket closed');
    });
    server.addEventListener('error', event => {
      console.error('WebSocket error:', event);
    });

    return new Response(null, {
      status: 101,
      webSocket: client,
    });
  },
};

Real-time Broadcasting

An echo server is a good start, but many real-time apps need to send messages to multiple connected clients (broadcasting).

For example, in a chat application, when one user sends a message, all other users in the chat room should receive it.

Cloudflare Workers, being stateless by default, need a mechanism to manage these connections across requests. This is where Durable Objects become incredibly useful for maintaining state and managing multiple WebSocket connections for a shared resource.

(We'll explore Durable Objects in a later lesson!)

Securing WebSockets

Just like HTTP, WebSocket connections should be secured. Always use wss:// (WebSocket Secure) instead of ws://.

wss:// connections are encrypted using TLS/SSL, preventing eavesdropping and tampering. Cloudflare Workers handle TLS termination automatically, so your connections are secured by default when deployed.

  • Use wss:// for production.
  • Implement authentication/authorization.
  • Validate all incoming messages.

Check Your Understanding

Consider a Cloudflare Worker that aims to establish a WebSocket connection with a client.

Recap: WebSockets at the Edge

Great job! You've learned how to implement real-time communication with WebSockets using Cloudflare Workers.

  • WebSockets enable persistent, two-way communication.
  • Workers use WebSocketPair and 101 Switching Protocols for the handshake.
  • Event listeners ('message', 'close', 'error') manage connection lifecycle.
  • Always use wss:// for secure connections.

In future lessons, we'll dive into Durable Objects to manage state across multiple WebSocket connections for advanced real-time applications.

Gratuit pour commencer

Apprends Edge Computing with Cloudflare Workers & Deno avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
12
Leçons
47

Questions Fréquemment Posées

La leçon « WebSockets et temps réel » est-elle gratuite ?

Oui — le texte complet de « WebSockets et temps réel » 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 Edge Computing with Cloudflare Workers & Deno, passe à CoddyKit PRO. Le cours Edge Computing with Cloudflare Workers & Deno comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « WebSockets et temps réel » ?

Implémentez des applications en temps réel avec Cloudflare Workers et WebSockets pour des expériences interactives. Tu pratiques Edge Computing with Cloudflare Workers & Deno 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 Edge Computing with Cloudflare Workers & Deno ?

Aucune expérience préalable n'est requise. Edge Computing with Cloudflare Workers & Deno 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 1 sur 4.

Combien de temps prend la leçon « WebSockets et temps réel » ?

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 Edge Computing with Cloudflare Workers & Deno ?

Oui. Chaque leçon Edge Computing with Cloudflare Workers & Deno 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

  1. WebSockets et temps réel
  2. Files d’attente et tâches asynchrones
  3. Liaisons de services et intégrations
  4. Déclencheurs Cron et Workers planifiés
← Retour à Edge Computing with Cloudflare Workers & Deno