Einen Client mit einer Session verbinden
Wenn das Frontend einer Live-Session beitreten, Nachrichten vom Actor empfangen und Nachrichten an den Actor senden soll, verbinde einen Client mit einer Actor-Session. So verbindest du einen Client mit einer Session:- Rufe
base44.actors.ActorName(sessionId)auf, um die Session auszuwählen. - Rufe
.connect()auf, um die WebSocket-Verbindung zu öffnen. - Rufe
conn.subscribe()auf, um einen Listener für Nachrichten vom Actor zu registrieren. - Rufe
conn.send()auf, um eine Nachricht an den Actor zu senden.
chatRoom-Actor-Session, hört auf Nachrichten und sendet eine Nachricht:
Ticks ausführen
Wenn sich Arbeit in einem Intervall wiederholen soll, während Clients in der Session sind, führe Ticks aus. Beispiele sind das Broadcasten des Spielzustands oder das Aktualisieren eines Runden-Timers. So führst du Ticks aus:- Setze
tickIntervalMsauf die Intervalllänge in Millisekunden. - Implementiere
shouldTick()so, dass estruezurückgibt, um weiter zu ticken, undfalse, um zu stoppen. - Führe in
handleTick()die Arbeit für jedes Intervall aus.
Wakes planen
Wenn Arbeit einmalig zu einem bestimmten Zeitpunkt laufen soll, egal ob die Session aktiv oder inaktiv ist, plane einen Wake. Beispiele sind das Beenden eines Zugs nach 30 Sekunden oder das Schließen einer leeren Lobby. So planst du einen Wake:- Rufe
schedule()mit einem Schlüssel und einem Zeitpunkt auf, um den Wake zu planen. - Prüfe in
handleWake()den Schlüssel und führe die Arbeit für diesen Wake aus. - Wenn der Wake nicht mehr gilt, rufe
cancelSchedule()mit dem Schlüssel auf.
Client-Verbindungen verwalten
Wenn du festlegen musst, wer einer Session beitreten darf, einem bestimmten Client antworten oder alle Clients in der Session erreichen willst, verwalte Client-Verbindungen. So verwaltest du Client-Verbindungen:- Prüfe in
handleConnect()die Eigenschaftconn.identityund rufeconn.reject()auf, um einen Client abzulehnen. - Rufe
conn.send()auf, um nur diesem Client zu antworten. - Rufe in
handleMessage()broadcast()auf, um jeden verbundenen Client zu erreichen. Um den Absender zu identifizieren, füge Felder ausconnin die Nachricht ein.
Session-Daten persistieren
Wenn Werte eine Leerlaufphase überstehen müssen, persistiere Session-Daten. Beispiele sind ein Spielbrett, eine Verlaufsliste oder der aktuelle Zug. So persistierst du Session-Daten:- Lade in
handleStart()Werte austhis.storagein Klassenfelder. - Rufe nach jeder Änderung
this.storage.put()auf, um den aktualisierten Wert zu speichern. - Um die Session zurückzusetzen, rufe
this.storage.delete()oderthis.storage.deleteAll()auf.
Entitätsdaten aus einer Session schreiben
Wenn die Session App-Datensätze erstellen oder aktualisieren muss, schreibe Entitätsdaten. Beispiele sind ein Endstand oder eine abgeschlossene Bestellung. So schreibst du Entitätsdaten aus einer Session:- Validiere die eingehende Nachricht vor dem Schreiben.
- Lies die Nutzer-ID aus
conn.identity.userId. - Verwende
this.client.asServiceRolefür erweiterten Zugriff. Schreibe mit einem stabilen Schlüssel, etwa der Session-ID. So aktualisiert ein wiederholter Handler denselben Datensatz.
Eine Backend-Funktion für Aufgaben mit Secrets aufrufen
Actors können App-Secrets mitsecrets.get() lesen. Wenn ein Handler eine Aufgabe mit einem Secret ausführen muss, etwa eine externe API mit einem API-Schlüssel aufrufen, empfehlen wir den Aufruf einer Backend-Funktion. Die Funktion liest das Secret und gibt das Ergebnis zurück, niemals das Secret.
So rufst du eine Backend-Funktion aus einem Actor auf:
- Erstelle eine Backend-Funktion, die das Secret mit
secrets.get()liest, die Aufgabe erledigt und das Ergebnis zurückgibt. - Rufe in einem Handler
this.client.functions.invoke()mit dem Funktionsnamen und den zu sendenden Daten auf. - Verwende das Ergebnis in deiner Session, etwa indem du es per Broadcast an verbundene Clients sendest.
Siehe auch
- Actors – Übersicht: Konzepte und Terminologie
- Einen Actor erstellen: Actor-Dateien und eine minimale Klasse
- Actors – Dateien und Code: Vollständige API der Backend-Klasse
actors deploy: Lokale Actors deployen
Diese Seite wurde mit KI übersetzt. Die genauesten und aktuellsten Informationen findest du in der englischen Version.