Die Kladde spricht bisher auf zwei Wegen mit der Außenwelt. Ein Programm fragt ihre API (Modul 2.3 und 2.12), und die Kladde meldet sich selbst per Webhook bei einer fremden Adresse (Lektion 2.12.5). Ein Weg fehlt noch: Der Server sagt einem offenen Browser von sich aus, dass etwas passiert ist. Wer im Büro die Terminliste offen hat, erfährt von einer neuen Buchung bisher erst, wenn er die Seite neu lädt.
Dafür gibt es in ASP.NET Core SignalR. Sie kennen es schon, ohne es so zu nennen: Die Verbindung hinter den interaktiven Inseln aus
Lektion 2.5.8, der Circuit unter /_blazor, ist eine SignalR-Verbindung. In diesem Modul bauen Sie einen eigenen Hub, über den die Kladde
Nachrichten an angemeldete Browser schickt. Am Ende dieser Lektion erscheint eine neue Buchung auf der Terminliste, sobald sie gespeichert
ist, und ein Bildschirmleser sagt sie an.
Wann sich Echtzeit lohnt und wann ein Neuladen reicht
Eine offene Verbindung je Browser-Tab kostet etwas: Speicher auf dem Server, eine Verbindung, die der Server halten muss, ein Skript im Browser, und ein Teil, der ausfallen kann. Deshalb steht vor dem ersten Hub dieselbe Frage wie vor der ersten Insel in Lektion 2.5.8.
| Weg | passt, wenn | Beispiel in der Kladde |
|---|---|---|
| Neuladen | sich die Daten selten ändern oder es egal ist, ob man eine Änderung ein paar Minuten später sieht | die Kontaktliste, die Ausschreibungen von heute Nacht |
| interaktive Insel (Lektion 2.5.8) | eine Person viele kleine Schritte auf ihrer Seite macht | der Wochenkalender: blättern, ohne die Seite neu zu laden |
| eigener Hub | eine Änderung, die jemand anderes auslöst, in Sekunden bei vielen offenen Seiten ankommen soll | eine neue Buchung erscheint bei allen, die gerade die Terminliste offen haben |
Die Insel löst das Problem der Terminliste nicht von selbst. Sie redet zwar dauernd mit dem Server, aber nur über ihre eigenen Klicks. Bucht draußen jemand einen Termin, weiß die Insel davon nichts. Es braucht einen Weg, auf dem der Server allen offenen Seiten Bescheid sagt.
Und eine Regel gilt für jede Live-Anzeige: Sie ist ein Hinweis, keine Zustellung. Wer gerade keine Verbindung hat, verpasst die Nachricht. Das ist in Ordnung, solange die Seite nach dem Neuladen stimmt. Was nicht verloren gehen darf, etwa die Bestätigungsmail an die buchende Person, geht weiter über die Outbox aus Lektion 2.8.4.