Cloudflare Workers Durable Objects: Echtzeit-Zustand

Erstellen Sie zustandsbehaftete Echtzeitanwendungen mit Cloudflare Durable Objects, einschließlich Koordination, WebSocket-Verwaltung und Transaktionszuständen.

Alex Chen
Alex Chen
1. Juni 202613 min read
Auch verfügbar auf:English · 中文

TL;DR: Durable Objects sind Single-Instance JavaScript-Klassen, die den Zustand beibehalten und über Anfragen hinweg koordinieren. Im Gegensatz zu zustandslosen Workers haben Durable Objects eine garantierte Einzigartigkeit -- für eine bestimmte ID existiert weltweit nur eine einzige Instanz. Dieser Leitfaden behandelt Anwendungsfälle (WebSocket-Räume, Rate Limiting, verteilte Zähler), den Durable Object Lebenszyklus und die Integration mit TanStack Start. Eingehendere Informationen zu WebSocket-Verbindungen in Workers finden Sie in unserem Cloudflare Workers WebSocket Guide. Vollständiger Leitfaden unter tanstackship.com.


Einführung

Workers sind von Grund auf zustandslos konzipiert. Jede Anfrage kann an ein anderes Rechenzentrum weitergeleitet werden. Für Anwendungen, die Koordination erfordern -- Chatrooms, kollaboratives Bearbeiten, verteilte Zähler -- benötigen Sie einen zentralen Koordinationspunkt. Durable Objects lösen dieses Problem, indem sie weltweit eindeutige, zustandsbehaftete Instanzen bereitstellen. Wenn Sie neu im Bereich Workers sind, bietet unsere Cloudflare Workers Introduction die nötigen Grundlagen, um die DO-Architektur zu verstehen.


Grundlegendes Durable Object

ts
export class ChatRoom implements DurableObject {
  private sessions: Map<string, WebSocket> = new Map()

  async fetch(request: Request): Promise<Response> {
    const url = new URL(request.url)

    if (url.pathname === '/websocket') {
      const pair = new WebSocketPair()
      const [client, server] = Object.values(pair)

      this.sessions.set(crypto.randomUUID(), server)

      server.accept()
      server.addEventListener('message', (event) => {
        // An alle verbundenen Clients senden
        this.sessions.forEach((ws) => {
          ws.send(event.data as string)
        })
      })

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

    return new Response('Not found', { status: 404 })
  }
}

Anwendungsfälle für Durable Objects

AnwendungsfallZustand pro ObjektKoordinationsmuster
ChatroomVerbundene WebSocketsBroadcast an alle
Rate LimiterAnfragezählerAblehnung bei Grenzwert
Spiel-LobbySpielerlisteMatchmaking
DokumentensynchronisationOperationsprotokollCRDT/OT Merge
Verteilter ZählerZählerwertAtomares Inkrement

Fazit

Durable Objects füllen die Lücke zwischen zustandslosen Workers und herkömmlichen Datenbanken. Sie bieten Single-Instance-Koordination für Echtzeitanwendungen. Verwenden Sie sie, wenn Sie zugesicherte Einzigartigkeit und Transaktionszustände benötigen.

Für eine schrittweise Implementierung werfen Sie einen Blick auf das Real-Time Chat Application Tutorial. Um Echtzeit-DO-Daten mit Ihrem Frontend zu verbinden, zeigt die TanStack Query WebSocket Integration, wie Sie Ihre Benutzeroberfläche mit Live-Daten synchron halten.