Ich habe eine Instant Messenger-Anwendung ganz auf @Cloudflare aufgebaut. Es hat 1 Tag, 3 Dateien, 4 Ressourcen gedauert... und sie ist bereit, von 0 auf Millionen zu skalieren. Worker → Authentifizierung & Routing D1-Datenbank → Benutzer/Passwort speichern User DO → Benutzerprofil & Freunde Conversation DO → Nachrichten Blog in der Antwort, aber hier ein schneller Teaser: Die cloudflare/actors-Bibliothek hat vieles davon mit Persistenz-Eigenschaften, einfacher Verwaltung von Websocket-Verbindungen und dem Senden von Nachrichten an alle Zuhörer zum Kinderspiel gemacht. Aber was hat jedes Teil gemacht? Authentifizierung & Routing (Worker + D1) Alle Anfragen kommen über den Worker, entweder authentifiziert oder nicht. Wenn nicht authentifiziert, sind die verfügbaren Aktionen Anmelden oder Registrieren. Wenn authentifiziert, kann die Anfrage an eines unserer Durable Objects (Benutzer oder Konversation) weitergeleitet werden, um eine Websocket-Verbindung herzustellen. Alle Authentifizierungsinformationen der Benutzer werden in einer D1-Datenbank gespeichert (ich habe es für dieses Beispiel alles CF gehalten). Benutzerdienst (Durable Object) Unsere Freundesliste verbindet sich direkt über Websocket mit unserem Benutzer-Durable Object. Wenn wir unseren Status aktualisieren, senden wir eine Nachricht an unser individuelles DO, das dann über RPC an die DOs unserer Freunde senden kann und feststellen kann, ob sie online sind, um ihnen eine Websocket-Nachricht für die Live-Aktualisierung zu senden. Hier speichern wir auch unsere Freundesliste in einer SQLite-Datenbank, die auf unseren Benutzer beschränkt ist. Konversationsdienst (Durable Object) Jede einzelne Konversation zwischen zwei Benutzern erhält ihre eigene DO-Instanz. Ihre einzige Verantwortung ist es, Nachrichten zu speichern, Benachrichtigungen (über Sockets) zu senden, wenn neue Nachrichten gesendet werden, und eine Benachrichtigung zu senden, wenn ein Benutzer zu tippen beginnt, damit wir sehen können, "Person tippt..." TLDR; Apps zum Spaß zu bauen, um nostalgische Kindheitserinnerungen wiederzuleben, ist... es wert.