Das HTTP-Problem: Anfrage und Antwort sind nicht in Echtzeit
Browser sprechen über HTTP mit Servern. Diese Technik gibt es seit dem Jahr 1991. Sie ist die Basis vom Internet. Aber HTTP ist nicht für Echtzeit-Apps gemacht.
HTTP nutzt eine einfache Regel. Diese Regel heißt Request-Response. Das bedeutet Anfrage und Antwort.
- Der Browser fragt nach Daten.
- Der Server gibt die Daten.
- Die Verbindung schließt sich.
HTTP Ablauf: Die Verbindung endet nach jeder Antwort
Warum ist das ein Problem?
| Feature | Früher (1990er Jahre) | Heute |
|---|---|---|
| Nutzung | Feste Texte lesen | Gemeinsam an Texten arbeiten |
| Zusammenarbeit | Eine Person liest allein | Viele Personen arbeiten gleichzeitig |
| Technik | ✓ Programmierer haben HTTP dafür gemacht | ✗ HTTP funktioniert hier nicht gut |
Programmierer haben HTTP für einfache Texte gemacht. Eine Person liest allein. Für gemeinsame Apps in Echtzeit funktioniert HTTP nicht gut.
Die großen Probleme von HTTP:
- Nur eine Richtung: Nur der Browser darf Fragen stellen. Der Server darf nicht von sich aus sprechen.
- Anfrage und Antwort: Der Browser muss immer anfangen. Das gilt auch bei offenen Verbindungen.
- Keine Push-Nachrichten: Der Server kann keine Neuigkeiten von selbst senden.
- Ständiges Nachfragen: Der Browser muss immer wieder fragen. Nur so bemerkt er Änderungen.
Seit dem Jahr 1997 bleiben Verbindungen oft offen. Das heißt HTTP/1.1 oder Keep-Alive. Das spart viel Zeit beim Aufbau der Verbindung. Aber es löst das Hauptproblem nicht. Der Server kann immer noch keine Nachrichten von sich aus senden. Die Regel bleibt Anfrage und Antwort.
HTTP bedeutet Abruf. Sie fragen nach Daten. Echtzeit-Apps brauchen aber Push. Der Server muss Sie von sich aus informieren.
Übersicht der Themen
Der Vergleich
HTTP gegen Convex
Eigene Server
Datenschutz, DSGVO
Zusammenfassung
Wann Sie reaktive Backends nutzen
Ein Beispiel aus dem Alltag: Die Einkaufsliste
Die Situation: Sie und Ihr Partner haben eine Einkaufsliste auf Papier.
Sie schauen auf Ihre Liste
Ihr Partner kauft die Milch
Sie kaufen auch Milch
Das Ergebnis: Sie haben nun doppelt Milch gekauft. Ihre Listen waren nicht auf dem gleichen Stand.
Genau dieses Problem haben Apps mit HTTP!
Das gleiche Problem bei Apps
Das Problem der Einkaufsliste mit HTTP
Die drei wichtigsten Probleme
1. Alte Daten
Sie sehen die Änderung von Ihrem Partner nicht. Sie beide arbeiten mit verschiedenen Listen.
2. Keine automatische Info
Der Server gibt nicht automatisch Bescheid. Sie müssen die App selbst neu laden. Erst dann sehen Sie die Updates.
3. Gleichzeitige Änderungen
Beide Personen streichen gleichzeitig einen Artikel durch. Dann geht eine Änderung verloren. Das nennt man Race Condition. Das bedeutet Wettlauf.
Wie lösen Programmierer dieses Problem heute?
Programmierer nutzen drei Tricks. So können sie HTTP für Echtzeit-Apps nutzen. Alle drei Tricks machen viel Arbeit:
Fachbegriff: Polling
Technik: setInterval() und fetch(). Der Browser fragt immer wieder nach neuen Daten.
So funktioniert es
Der Browser fragt alle paar Sekunden beim Server nach. Er fragt: "Gibt es Neuigkeiten?"
Ein Beispiel aus dem Alltag
Sie schauen alle 5 Sekunden auf Ihr Handy. Sie prüfen immer wieder auf neue Nachrichten.
Code:
// Der Browser fragt alle 5 Sekunden nach neuen Daten
setInterval(async () => {
const response = await fetch('/api/project/status')
const data = await response.json()
updateUI(data)
}, 5000) // Das passiert alle 5 SekundenDie Probleme:
- Verschwendung: Der Browser fragt auch bei keinen Änderungen nach.
- Verzögerung: Sie sehen Änderungen erst beim nächsten Nachfragen.
- Belastung: Sehr viele Nutzer machen den Server langsam.
Das wichtigste Problem
Diese drei Lösungen sind nur Notlösungen. Programmierer verbringen viel Zeit mit diesen Problemen. Sie haben dann weniger Zeit für neue Funktionen der App.
Die Lösung: Reaktive Backends
Die neue Regel: Automatische Updates
Sie haben eine gemeinsame Einkaufsliste auf dem Handy. Ihr Partner streicht "Milch" durch. Sie sehen die Änderung sofort auf Ihrem Handy. Sie müssen nicht nachfragen. Alles passiert ganz automatisch!
| Feature | HTTP (das alte System) | Reaktive Backends (das neue System) |
|---|---|---|
| Daten-Updates | Sie müssen immer fragen: "Gibt es was Neues?" | Der Server informiert Sie automatisch. |
| Beispiel | Sie öffnen alle 5 Sekunden den Briefkasten. | Sie bekommen eine Push-Nachricht auf das Handy. |
| Einkaufsliste | Sie kaufen die Milch doppelt. | Die App synchronisiert die Liste automatisch. |
So funktioniert es: Die gemeinsame Einkaufsliste
- Sie öffnen die App. Sie sehen die gemeinsame Einkaufsliste.
- Der Server merkt sich: "Diese Person schaut auf die Einkaufsliste."
- Ihr Partner streicht Milch durch. Der Server schickt Ihnen automatisch die Änderung.
- Ihre App aktualisiert die Liste. Sie sehen sofort die durchgestrichene Milch.
Convex: Ein Beispiel aus der Praxis
Klick lädt YouTube (Datenschutz)
Convex ist ein reaktives Backend-System. Es macht Updates voll automatisch.
Einfach gesagt: Convex übernimmt die Synchronisation. Es kümmert sich um die Verbindungen. Sie konzentrieren sich auf die Funktionen Ihrer App.
Convex hat drei wichtige Funktionen:
- Automatisches Merken (Reactive Queries) – Der Server kennt die benötigten Daten.
- Alles oder Nichts (Transactional Mutations) – Änderungen sind immer komplett.
- Immer verbunden (Real-time Subscriptions) – Eine dauerhafte Verbindung ohne viel Arbeit.
Funktion 1: Automatisches Merken (Reactive Queries)
Das Problem: Der Server muss den Empfänger der Nachricht kennen.
Die Lösung: Convex merkt sich die Nutzer automatisch.
Zurück zur Einkaufsliste: Sie und Ihr Partner öffnen die Liste. Der Server merkt sich das. Ihr Partner streicht "Milch" durch. Der Server informiert nur Sie beide. Andere Nutzer bekommen keine Nachricht.
Code-Beispiel
// Convex Query: Automatisches Merken
export const getShoppingList = query({
args: { listId: v.id("shoppingLists") },
handler: async (ctx, { listId }) => {
// Convex merkt sich automatisch:
// "Dieser Browser schaut auf diese Einkaufsliste"
const list = await ctx.db.get(listId)
return list
},
})
// Im Browser: Automatische Updates
const shoppingList = useQuery(api.lists.getShoppingList, { listId })
// Die Anzeige aktualisiert sich automatisch bei einer Aenderung!Sehr schnell: Nur die betroffenen Browser bekommen Updates.
Keine Programmierung: Sie müssen nichts dafür programmieren. Convex macht es von alleine.
Sehr genau: Der Server informiert nur die Personen mit dieser speziellen Liste.
Funktion 2: Alles oder Nichts (Transactional Mutations)
Das Problem: Ein Fehler passiert mitten in einer Änderung. Was tun?
Die Lösung: Bei Convex klappt alles oder gar nichts.
Ein Beispiel mit Geld:
Sie machen eine Überweisung:
- Geld vom Konto A abbuchen.
- Geld auf Konto B einzahlen.
Was ist das Problem? Ein Fehler passiert im zweiten Schritt. Dann ist das Geld weg!
Atomare Transaktion bedeutet:
- Entweder passieren BEIDE Schritte.
- Oder KEINER der beiden Schritte passiert.
- Es passiert nie nur ein Schritt!
Keine kaputten Daten: Sie haben keine unfertigen Änderungen in der Datenbank.
Sehr sicher: Bei einem Fehler setzt Convex alles zurück.
Ganz automatisch: Sie müssen nichts dafür programmieren.
Code-Beispiel
// Convex Mutation: Alles oder Nichts
export const checkOffItem = mutation({
args: {
listId: v.id("shoppingLists"),
itemName: v.string(),
},
handler: async (ctx, { listId, itemName }) => {
// Alles zusammen ist eine atomare Transaktion
const list = await ctx.db.get(listId)
if (!list) {
throw new Error("Die Einkaufsliste ist nicht da")
}
// Den Artikel findenDie vier Garantien (ACID-Regeln):
- Unteilbar: Alles oder nichts.
- Konsistent: Die Daten sind immer gültig.
- Isoliert: Gleichzeitige Änderungen stören sich nicht.
- Dauerhaft: Erfolgreiche Änderungen sind fest gespeichert.
Funktion 3: Immer verbunden (Real-time Subscriptions)
Das Problem: Wie informiert der Server Sie ohne Verzögerung?
Die Lösung: Convex hält eine dauerhafte Verbindung offen.
Das Geniale: Sie müssen sich nicht um WebSockets kümmern!
Convex richtet die Verbindung automatisch ein. Sie programmieren Ihre App ganz normal. Die Updates kommen automatisch.
Code-Beispiel
// Das muessen Sie schreiben (es ist sehr einfach!):
import { ConvexProvider, ConvexReactClient } from 'convex/react'
const convex = new ConvexReactClient(process.env.NEXT_PUBLIC_CONVEX_URL!)
function App() {
return (
<ConvexProvider client={convex}>
{/* Alle Teile hier bekommen automatische Updates */}
<ShoppingListApp />
</ConvexProvider>
)
}
// In Ihrer App: Sie fragen ganz normal Daten abSie müssen NICHTS programmieren für:
- Den Aufbau der Verbindung.
- Die Überwachung der Verbindung.
- Die neue Verbindung nach einem Abbruch.
- Das Empfangen von Updates.
- Die Aktualisierung der Anzeige.
Convex macht all diese Dinge automatisch!
Bei normalen WebSockets: Sie müssen Hunderte Zeilen Code schreiben. Das macht sehr viel Arbeit.
Bei Convex: Sie schreiben nur 2 Zeilen Code. Den Rest macht Convex automatisch.
Sie sparen Zeit: Aus Tagen oder Wochen Arbeit werden wenige Minuten!
Der Vergleich: Alt gegen Neu
Hier sehen Sie die Unterschiede in einer Tabelle:
| Feature | Das alte HTTP | Das reaktive Backend (Convex) |
|---|---|---|
| Datenkonsistenz | Manuell | Automatisch |
| State Management | Im Browser | Im Backend |
| Echtzeit-Updates | Immer wieder fragen | Sofortige Updates |
| Cache-Invalidierung | Manuell | Automatisch |
| Transaktionale Sicherheit | In der App | Vom System garantiert |
| Development Complexity | Schwer | Leicht |
Eigene Server und Datenschutz
Sie können Convex auf eigenen Servern betreiben. Das ist wichtig für Firmen mit strengen Regeln für den Datenschutz.
Der Code ist offen zugänglich (Open Source). Sie können das Backend in Ihrer eigenen Firma laufen lassen. Das gibt Ihnen die volle Kontrolle über alle Daten.
Die Funktionen: Das eigene Backend enthält alle wichtigen Funktionen.
| Funktion | Convex auf eigenen Servern | Convex in der Cloud (vom Anbieter) |
|---|---|---|
| Abfragen und Änderungen | Gleiche Funktion | Gleiche Funktion |
| Echtzeit-Verbindungen | Gleiche Funktion | Gleiche Funktion |
| Die Übersichts-Seite (Dashboard) | Ist dabei (Sie verwalten es selbst) | Ist dabei (Der Anbieter verwaltet es) |
| Daten holen und senden | Sie müssen es selbst machen | Automatische Hilfen (Fivetran, Airbyte) |
| Protokolle speichern | Sie brauchen eine eigene Lösung | Ist direkt eingebaut |
| Fehler überwachen | Sie brauchen eine eigene Lösung | Ist direkt eingebaut |
| Sicherheitskopien (Backups) | Sie müssen das selbst machen | Geht voll automatisch (jeden Tag oder jede Woche) |
| Hilfe bei Katastrophen | Sie tragen die volle Verantwortung | Convex kümmert sich darum |
| Mehr Leistung (Skalierung) | Sie müssen Code ändern | Geht voll automatisch |
| Offizieller Support | Nur Hilfe aus dem Internet | Hilfe per E-Mail |
| Offizielle Zertifikate | Sie tragen die Verantwortung | Zertifikate sind vorhanden (geprüfte Technik) |
Hinweise zum Datenschutz (DSGVO): Convex ist eine Firma aus den USA. Bei der Nutzung der Cloud gehen Daten in ein Drittland. Sie brauchen dafür einen speziellen Vertrag. Für viele normale Apps reicht das völlig aus. Bei sehr wichtigen Daten ist ein eigener Server besser. Dazu zählen zum Beispiel Gesundheitsdaten oder Bankdaten.
Unser Tipp: Für die meisten Internetseiten können Sie die Managed Cloud nutzen. Sie ist sicher. Eigene Server lohnen sich nur für Banken, Krankenhäuser oder Behörden.
Alles wird für Sie erledigt
Convex übernimmt die komplette Technik. Convex kümmert sich um Hosting, Leistung, Überwachung und Updates.
Die Vorteile:
Keine Arbeit mit der Server-Verwaltung
Automatische Sicherheitsupdates
Sehr schnelle Verbindungen weltweit
Sie bezahlen nur für die tatsächliche Nutzung
Für wen ist das gut?
Für neue Ideen, für Startups und für schnelle Projekte.
Der Wechsel: Von alt zu neu
Wie schwer ist der Wechsel?
Es gibt eine gute Nachricht. Sie müssen nicht alles sofort ändern. Sie können Schritt für Schritt wechseln.
Ein Beispiel: Wie viel einfacher wird der Code?
Vorher: Mit dem alten System (HTTP)
Was ist hier das Problem?
Sie brauchen über 50 Zeilen Code nur für die Anzeige.
Der Browser sendet alle 5 Sekunden ständige Anfragen.
Das Programmieren ist sehr schwer. Sie müssen Fehlerbehandlungen selbst schreiben.
Es ist unsicher. Es kann leicht zu Fehlern kommen.
Code-Beispiel
// Altes System: Viel zu kompliziert!
// Backend (Express.js)
app.get('/api/projects/:id', async (req, res) => {
const project = await db.projects.findById(req.params.id)
res.json(project)
})
app.patch('/api/projects/:id', async (req, res) => {
const updated = await db.projects.update(req.params.id, req.body)
res.json(updated)
})
// Frontend (React + Redux)
const ProjectView = ({ projectId }) => {
const dispatch = useDispatch()Nachher: Mit Convex (viel einfacher!)
Der Unterschied ist riesig!
Sie brauchen 70 Prozent weniger Code. Es sind 15 Zeilen anstatt 50!
Es gibt keine ständigen Anfragen mehr.
Es ist automatisch sicher. Transaktionen sind atomar.
Die Fehlerbehandlung ist eingebaut. Sie müssen nichts tun.
Alles ist immer synchron. Alle Nutzer sehen garantiert dieselben Daten.
Zusammenfassung: Sie schreiben nicht mehr Hunderte Zeilen Code. Sie nutzen zwei einfache Befehle. Den Rest übernimmt Convex.
Code-Beispiel
// Convex Backend (viel einfacher!)
export const getShoppingList = query({
args: { listId: v.id("shoppingLists") },
handler: async (ctx, { listId }) => {
// Einfach Daten holen. Convex merkt sich automatisch den Nutzer.
return await ctx.db.get(listId)
},
})
export const checkOffItem = mutation({
args: {
listId: v.id("shoppingLists"),
itemName: v.string(),
},
handler: async (ctx, { listId, itemName }) => {Vergleich der Geschwindigkeit (mit Zahlen)
Ein Beispiel: 1.000 Personen nutzen Ihre App gleichzeitig.
Was passiert:
Jede Person fragt alle 5 Sekunden nach Updates.
Das bedeutet:
-
12 Anfragen pro Person in der Minute (60 Sekunden geteilt durch 5).
-
12.000 Anfragen in der Minute bei 1.000 Personen.
-
Das passiert auch ohne Änderungen!
Wartezeit: Sie warten 2 bis 5 Sekunden auf Änderungen.
Belastung: Der Server muss sehr stark arbeiten.
99 Prozent weniger Anfragen an den Server!
50 Mal schneller in der Anzeige.
Viel günstiger bei den Server-Kosten.
Grenzen der Technik
Internetverbindung ist wichtig
Reaktive Backends brauchen eine aktive Internetverbindung. Die App kann sonst keine Daten abgleichen. Für Offline-Apps brauchen Sie zusätzliche Technik.
Reaktive Systeme sind für das Internet gemacht. Für Offline-Apps müssen Sie extra Funktionen programmieren.
Diese Apps brauchen Offline-Funktionen:
Apps für den ständigen Offline-Betrieb. Apps in Orten mit schlechtem Internet. Wichtige Apps auf dem Handy.
Aufwand für den Wechsel
Sie müssen alten Code oft neu schreiben. Wir empfehlen einen langsamen Wechsel.
Der schrittweise Wechsel: Machen Sie neue Funktionen mit Convex. Lassen Sie das alte System weiterlaufen. Wechseln Sie Schritt für Schritt.
Die Vorteile: Sie haben kein großes Risiko. Sie können Fehler leicht beheben.
Hilfe für Offline-Apps: Es gibt auch gemischte Lösungen. Der Browser speichert Daten lokal ab. Er gleicht Daten bei einer Internetverbindung ab. Das macht aber zusätzliche Arbeit beim Programmieren.
Zusammenfassung und Tipp
JA: Echtzeit-Apps, Apps für die Zusammenarbeit, moderne Internetseiten.
NEIN: Reine Offline-Apps, ganz einfache Internetseiten.
Unsere Meinung: Für Echtzeit-Apps brauchen Sie reaktive Backends. Der Wechsel lohnt sich auf jeden Fall.
Weitere Links zum Thema
- Convex Anleitungen – Die offiziellen Erklärungen und Beispiele. Es gibt eine kostenlose Version zum Testen.
- Das Reactive Manifesto – Die Grundregeln für reaktive Systeme. Das ist etwas technisch.
- Regeln für WebSockets – Die offizielle Technik-Seite für WebSockets. Das ist nur für Experten.