Eine Bestellseite kann gleichzeitig mit Ihrer Datenbank ein Update benötigen. Ein Webhook kann die Datenbankänderung auslösen. Ihr Server kann dann den resultierenden Zustand an verbundene Bildschirme veröffentlichen.
Bird Realtime liefert Updates über WebSockets.
Was sind Channels, Mitglieder und Verbindungen?
Ein Channel gruppiert Abonnements. Eine Verbindung ist ein offener WebSocket. Ein Mitglied ist eine authentifizierte Identität, die mit anderen Abonnenten geteilt wird.
Ein Presence-Channel zeigt, welche Mitglieder abonniert sind. Ein Mitglied kann mehrere Verbindungen nutzen, etwa separate Browser-Tabs.
Bird erstellt einen Channel, wenn sich die erste Verbindung anmeldet, und entfernt ihn, nachdem die letzte Verbindung ihn verlässt. Sie veröffentlichen auf den Channel-Namen, ohne eine separate Channel-Ressource zu erstellen.
Jede Verbindung erhält einen Identifier. Ihr Backend nutzt ihn, um ein privates Abonnement zu genehmigen. Eine Veröffentlichung kann diese Verbindung ausschließen, um das eigene Update nicht als Echo zurückzuschicken.
Wenn ein Mitglied drei Tabs öffnet, können diese Tabs drei Verbindungen unter einer Mitgliedsidentität erstellen. Presence meldet den Beitritt des Mitglieds bei der ersten Verbindung und das Verlassen nach dem Schließen der letzten Verbindung. Das Schließen des mittleren Tabs entfernt dieses Mitglied daher nicht aus der Liste.
Wer darf abonnieren?
Das Präfix des Channels bestimmt, ob ein Abonnement eine Autorisierung durch Ihr Backend erfordert.
Sie wählen einen Bird-Channel-Namen mit 1 bis 164 Zeichen aus Buchstaben, Ziffern und _ - = @ , . ;. Rechnen Sie das Präfix in diese Länge ein, damit ein generierter privater Name innerhalb des Limits bleibt.
| Namenspräfix | Zugriff |
|---|---|
| Kein Private- oder Presence-Präfix | Öffentlich für Clients, die den App-Key besitzen. |
private- | Ihr Backend genehmigt und signiert jedes Abonnement. |
presence- | Ihr Backend genehmigt das Abonnement und liefert die Mitgliedsidentität, die mit Abonnenten geteilt wird. |
private-encrypted- | Privater Zugriff mit Ereignisinhalten, die mit einem von Ihnen kontrollierten Schlüssel verschlüsselt sind. |
Der App-Key ist im Client-Code sichtbar. Ein ungewöhnlicher öffentlicher Channel-Name schützt daher keine vertraulichen Daten. Bewahren Sie das App-Secret auf Ihrem Server auf und verwenden Sie es, um Abonnement-Genehmigungen zu signieren.
Bei einem privaten Abonnement sendet der Client seinen Verbindungs-Identifier und den Channel-Namen an Ihren Autorisierungsendpunkt. Ihr Server prüft den Zugriff, bevor er die Signatur zurückgibt. Dieser Endpunkt autorisiert den Zugriff. Er empfängt nicht jedes veröffentlichte Ereignis, wie es ein Webhook täte.
Was bedeutet der Unterschied in der Praxis?
Verwenden Sie Webhooks für wiederherstellbare Aufgaben auf Ihrem Server. Verwenden Sie Pub/Sub für Updates an verbundene Clients.
Ein Bird-Webhook sendet ein Ereignis an einen HTTPS-Endpunkt, den Sie betreiben. Wiederholungsversuche erstrecken sich über etwa 27,5 Stunden, mit Wartezeiten, die durch zufällige Variation, Empfängerüberlastung und angeforderte Verzögerungen angepasst werden. Dieses Zeitfenster gibt Ihrem Empfänger Zeit zur Wiederherstellung. Eine Wiedergabe verpasster Ereignisse kann Zustellungen wiederherstellen, die erfolglos geblieben sind.
Ein Realtime-Channel sendet Ihr veröffentlichtes Ereignis an abonnierte Clients. Ein getrennter Client kann es verpassen. Ein Cache-Channel kann einem neuen Abonnenten sein letztes Ereignis liefern, solange dieses Ereignis im Cache bleibt. Er speichert nicht die dazwischenliegenden Ereignisse.
Halten Sie vertrauliche serverseitige Verarbeitung hinter Ihrem Webhook-Empfänger. Veröffentlichen Sie nur den Zustand, den die autorisierten Clients des Channels sehen dürfen.
Webhook-Ereignistypen stammen aus dem Katalog von Bird, etwa email.delivered. Bei Realtime wählen Sie den Ereignisnamen Ihrer Anwendung beim Veröffentlichen. Der event-Name akzeptiert 1 bis 200 Zeichen. Die Präfixe bird: und bird_internal: sind reserviert und können nicht für Ihre Anwendungsereignisse verwendet werden.
Clients empfangen außerdem Protokollereignisse über Abonnementerfolg, Mitgliederänderungen und Verbindungsanzahlen. Diese Ereignisse beschreiben die Verbindung oder den Channel selbst und nicht die Bestellung oder Nachricht Ihrer Anwendung.
Wie verwende ich beides zusammen?
Nutzen Sie das gespeicherte Webhook-Ereignis, um ein Realtime-Update für verbundene Clients auszulösen.
Empfangen Sie das Geschäftsereignis auf Ihrem Server. Aktualisieren Sie den dauerhaften Zustand vor der Veröffentlichung. Veröffentlichen Sie dann den Zustand, den verbundene Clients benötigen.
Bei einer Bestellseite kann der Webhook ein Datenbankupdate auslösen. Ihr Server veröffentlicht dann den aktualisierten Bestellstatus, sodass sich die Seite des Kunden ohne Neuladen aktualisiert.
Halten Sie diesen Datenbankzustand nach dem Wiederverbinden lesbar, da ein getrennter Client Veröffentlichungen verpassen kann. Webhooks, Polling oder Streaming vergleicht die Wiederherstellungsoptionen.
Realtime hat auch eigene Webhooks für Channel-Belegung und Mitglieder-Ankünfte oder -Abgänge. Konfigurieren Sie diese über das Dashboard und nicht über die öffentliche Webhooks-API.
Realtime-Übersicht behandelt Client-Verbindungen. Webhooks behandelt Anfragen, die an Ihren Server zugestellt werden.
Kurz gesagt
Ein Channel kann viele Abonnenten haben.
Eine Webhook-Anfrage geht an einen registrierten Endpunkt. Eine Veröffentlichung geht an Clients, die den Channel abonniert haben.
Private Abonnements erfordern eine Backend-Genehmigung.
Der App-Key ist im Client-Code sichtbar. Private- und Presence-Präfixe erfordern eine Signatur von Ihrem Server.
Mitglieder können mehrere Verbindungen haben.
Ein Mitglied mit drei Tabs tritt dem Presence-Channel bei der ersten Verbindung bei und verlässt ihn nach dem Schließen der letzten Verbindung.
Kombinieren Sie Zustellungswiederherstellung mit einer verbundenen Ansicht.
Nutzen Sie Webhook-Wiederherstellung für Server-Ereignisse und gespeicherten Zustand, um eine Realtime-Ansicht nach einer Verbindungsunterbrechung wiederherzustellen.