Connecter un client à une session
Lorsque le frontend doit rejoindre une session en direct, recevoir des messages de l’acteur et lui envoyer des messages, connectez un client à une session d’acteur. Pour connecter un client à une session :- Appelez
base44.actors.ActorName(sessionId)pour sélectionner la session. - Appelez
.connect()pour ouvrir la connexion WebSocket. - Appelez
conn.subscribe()pour enregistrer un écouteur des messages de l’acteur. - Appelez
conn.send()pour envoyer un message à l’acteur.
chatRoom, écoute les messages et envoie un message :
Exécuter des ticks
Lorsqu’une tâche doit se répéter à intervalle régulier pendant que des clients sont dans la session, exécutez des ticks. Par exemple, pour diffuser l’état d’un jeu ou mettre à jour un minuteur de manche. Pour exécuter des ticks :- Définissez
tickIntervalMssur la durée de l’intervalle en millisecondes. - Implémentez
shouldTick()pour renvoyertrueafin de continuer les ticks, etfalsepour les arrêter. - Dans
handleTick(), exécutez la tâche de chaque intervalle.
Planifier des réveils
Lorsqu’une tâche doit s’exécuter une seule fois à un moment précis, que la session soit active ou inactive, planifiez un réveil. Par exemple, pour terminer un tour après 30 secondes ou fermer un lobby vide. Pour planifier un réveil :- Appelez
schedule()avec une clé et une heure pour programmer le réveil. - Dans
handleWake(), vérifiez la clé et exécutez la tâche de ce réveil. - Lorsque le réveil n’est plus nécessaire, appelez
cancelSchedule()avec la clé.
Gérer les connexions des clients
Lorsque vous devez décider qui peut rejoindre une session, répondre à un client précis et atteindre tous les clients de la session, gérez les connexions des clients. Pour gérer les connexions des clients :- Dans
handleConnect(), vérifiezconn.identityet appelezconn.reject()pour refuser un client. - Appelez
conn.send()pour répondre uniquement à ce client. - Dans
handleMessage(), appelezbroadcast()pour atteindre tous les clients connectés. Pour identifier l’expéditeur, incluez des champs deconndans le message.
Persister les données de session
Lorsque des valeurs doivent survivre à une période d’inactivité, persistez les données de session. Par exemple, un plateau, une liste d’historique ou le tour en cours. Pour persister les données de session :- Dans
handleStart(), chargez les valeurs dethis.storagedans les champs de la classe. - Après chaque changement, appelez
this.storage.put()pour enregistrer la valeur mise à jour. - Pour réinitialiser la session, appelez
this.storage.delete()outhis.storage.deleteAll().
Écrire des données d’entité depuis une session
Lorsque la session doit créer ou mettre à jour des enregistrements de l’application, écrivez des données d’entité. Par exemple, un score final ou une commande terminée. Pour écrire des données d’entité depuis une session :- Validez le message entrant avant d’écrire.
- Lisez l’ID utilisateur depuis
conn.identity.userId. - Utilisez
this.client.asServiceRolepour un accès élevé. Écrivez avec une clé stable, comme l’ID de session, pour qu’un gestionnaire réexécuté mette à jour le même enregistrement.
Appeler une fonction backend pour les tâches avec secret
Les acteurs peuvent lire les secrets de l’application avecsecrets.get(). Lorsqu’un gestionnaire a besoin d’une tâche qui utilise un secret, comme appeler une API externe avec une clé API, nous vous recommandons d’appeler une fonction backend. La fonction lit le secret et renvoie le résultat, jamais le secret.
Pour appeler une fonction backend depuis un acteur :
- Créez une fonction backend qui lit le secret avec
secrets.get(), effectue la tâche et renvoie le résultat. - Dans un gestionnaire, appelez
this.client.functions.invoke()avec le nom de la fonction et les données à envoyer. - Utilisez le résultat dans votre session, par exemple en le diffusant aux clients connectés.
Voir aussi
- Présentation des acteurs : concepts et terminologie
- Créer un acteur : fichiers d’acteur et classe minimale
- Fichiers et code des acteurs : API complète de la classe backend
actors deploy: déployer les acteurs locaux
Cette page a été traduite par IA. Pour les informations les plus précises et à jour, consultez la version anglaise.