> ## Documentation Index
> Fetch the complete documentation index at: https://docs.base44.com/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Internal links on these pages omit the .md extension. Append .md to a docs page URL, or send an Accept: text/markdown header, to get that page as markdown.

# Crear un actor

> Escribe tu primer actor y gestiona el ciclo de vida de la conexión

<div className="dev-docs-banner">
  <div className="dev-docs-banner-content">
    <div className="dev-docs-banner-title">
      Estás viendo la documentación para desarrolladores
    </div>

    <div className="dev-docs-banner-text">
      Esta documentación es para desarrolladores que trabajan con la plataforma para desarrolladores de Base44.
    </div>
  </div>
</div>

Crea un [actor](/es/developers/backend/resources/actors/overview#actors) para ejecutar lógica de backend en una [sesión](/es/developers/backend/resources/actors/overview#sessions) en vivo que comparten varios [clientes](/es/developers/backend/resources/actors/overview#client), como una sala de chat o un juego multijugador. Un actor gestiona desde tu backend las conexiones, los mensajes y las desconexiones de los clientes.

## Archivos del actor

Crea los actores como archivos TypeScript en el directorio de actores de tu proyecto. Cada actor vive en su propio subdirectorio dentro de `base44/actors/` con un archivo `entry.ts`:

<Tree>
  <Tree.Folder name="base44" defaultOpen>
    <Tree.Folder name="actors" defaultOpen>
      <Tree.Folder name="chatRoom" defaultOpen>
        <Tree.File name="entry.ts" />
      </Tree.Folder>
    </Tree.Folder>
  </Tree.Folder>
</Tree>

El nombre de la carpeta se convierte en el nombre del actor en el SDK y determina cómo llaman los clientes al actor, por ejemplo `base44.actors.chatRoom`. Exporta la clase del actor como exportación predeterminada desde el archivo `entry.ts`.

Puedes incluir archivos `.ts`, `.js`, `.json` y `.jsonc` adicionales en el directorio del actor e importarlos desde `entry.ts`.

## entry.ts

El archivo de código contiene la clase de tu actor. Importa `Actor` desde `base44:runtime/actors` y exporta como exportación predeterminada una clase que extienda `Actor`. Pasa los genéricos `Incoming` y `Outgoing` para tipar los mensajes que el actor recibe y envía.

Implementa los siguientes métodos de clase. El método `handleStart()` es opcional:

* `handleStart()`: Carga los datos de sesión guardados desde el almacenamiento en los campos de la clase. Base44 llama a este manejador cada vez que se activa la sesión, así tu estado restaurado está listo antes de que Base44 gestione cualquier conexión. Para ver un ejemplo completo de almacenamiento, consulta [conservar los datos de sesión](/es/developers/backend/resources/actors/sample-flows#persist-session-data).

* `handleConnect()`: Envía el estado actual de la sesión al cliente que se conecta. Para rechazar conexiones o identificar clientes, consulta [gestionar las conexiones de clientes](/es/developers/backend/resources/actors/sample-flows#manage-client-connections).

* `handleMessage()`: Actualiza el estado de la sesión, lo conserva y difunde el cambio.

* `handleClose()`: Elimina cualquier estado vinculado a esa conexión. Si no hay estado de conexión que borrar, escribe un cuerpo vacío.

* `handleTick()`: Ejecuta código en cada intervalo de tick. Si el actor no usa ticks, escribe un cuerpo vacío. Para configurar ticks, consulta [ejecutar ticks](/es/developers/backend/resources/actors/sample-flows#run-ticks). Para programar un despertar único, consulta [programar despertares](/es/developers/backend/resources/actors/sample-flows#schedule-wakes).

El siguiente ejemplo muestra un actor `ChatRoom` simplificado:

```typescript theme={null}
import { Actor } from "base44:runtime/actors";

type Incoming = { type: "message"; text: string };
type Outgoing =
  | { type: "history"; messages: string[] }
  | { type: "message"; text: string };

export default class ChatRoom extends Actor<Incoming, Outgoing> {
  messages: string[] = [];

  async handleStart() {
    this.messages = (await this.storage.get<string[]>("messages")) ?? [];
  }

  async handleConnect(conn) {
    conn.send({ type: "history", messages: this.messages });
  }

  async handleMessage(_conn, msg) {
    this.messages.push(msg.text);
    await this.storage.put("messages", this.messages);
    this.broadcast({ type: "message", text: msg.text });
  }

  async handleClose(_conn) {}

  async handleTick() {}
}
```

## Ver también

* [Resumen de actores](/es/developers/backend/resources/actors/overview): Conceptos y terminología
* [Archivos y código de actores](/es/developers/backend/resources/actors/reference): API completa de la clase de backend
* [Actores: flujos de ejemplo](/es/developers/backend/resources/actors/sample-flows): Más patrones para temporizadores, conexiones, almacenamiento y entidades
* [`actors deploy`](/es/developers/references/cli/commands/actors-deploy): Despliega tu actor en Base44

<Note>Esta página fue traducida con IA. Para obtener la información más precisa y actualizada, consulta la [versión en inglés](/). </Note>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.