> ## 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.

# Criar um actor

> Escreva seu primeiro actor e gerencie o ciclo de vida da conexão

<div className="dev-docs-banner">
  <div className="dev-docs-banner-content">
    <div className="dev-docs-banner-title">
      Você está vendo a documentação para desenvolvedores
    </div>

    <div className="dev-docs-banner-text">
      Esta documentação é para desenvolvedores que trabalham com a plataforma para desenvolvedores
      Base44.
    </div>
  </div>
</div>

Crie um [actor](/pt-BR/developers/backend/resources/actors/overview#actors) para executar lógica de backend em uma [sessão](/pt-BR/developers/backend/resources/actors/overview#sessions) ao vivo compartilhada por vários [clientes](/pt-BR/developers/backend/resources/actors/overview#client), como uma sala de chat ou um jogo multiplayer. Um actor gerencia conexões de clientes, mensagens e desconexões a partir do seu backend.

## Arquivos do actor

Crie actors como arquivos TypeScript no diretório de actors do seu projeto. Cada actor fica em seu próprio subdiretório em `base44/actors/`, com um arquivo `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>

O nome da pasta se torna o nome do actor no SDK e determina como os clientes chamam o actor, por exemplo `base44.actors.chatRoom`. Exporte a classe do actor como exportação padrão do arquivo `entry.ts`.

Você pode incluir arquivos `.ts`, `.js`, `.json` e `.jsonc` adicionais no diretório do actor e importá-los a partir do `entry.ts`.

## entry.ts

O arquivo de código contém a classe do seu actor. Importe `Actor` de `base44:runtime/actors` e exporte uma classe que estende `Actor` como exportação padrão. Passe os genéricos `Incoming` e `Outgoing` para tipar as mensagens que o actor recebe e envia.

Implemente os seguintes métodos da classe. O método `handleStart()` é opcional:

* `handleStart()`: Carrega os dados salvos da sessão do armazenamento para os campos da classe. A Base44 chama esse handler sempre que a sessão é ativada, para que seu estado restaurado esteja pronto antes que a Base44 processe qualquer conexão. Para um exemplo completo de armazenamento, veja [persistir dados da sessão](/pt-BR/developers/backend/resources/actors/sample-flows#persist-session-data).

* `handleConnect()`: Envia o estado atual da sessão para o cliente que está se conectando. Para rejeitar conexões ou identificar clientes, veja [gerenciar conexões de clientes](/pt-BR/developers/backend/resources/actors/sample-flows#manage-client-connections).

* `handleMessage()`: Atualiza o estado da sessão, persiste o estado e transmite a mudança.

* `handleClose()`: Remove qualquer estado vinculado àquela conexão. Se não houver estado de conexão para limpar, escreva um corpo vazio.

* `handleTick()`: Executa código a cada intervalo de tick. Se o actor não usa ticks, escreva um corpo vazio. Para configurar ticks, veja [executar ticks](/pt-BR/developers/backend/resources/actors/sample-flows#run-ticks). Para agendar um wake único, veja [agendar wakes](/pt-BR/developers/backend/resources/actors/sample-flows#schedule-wakes).

O exemplo a seguir mostra um 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() {}
}
```

## Veja também

* [Visão geral de actors](/pt-BR/developers/backend/resources/actors/overview): Conceitos e terminologia
* [Arquivos e código de actors](/pt-BR/developers/backend/resources/actors/reference): API completa da classe de backend
* [Actors: fluxos de exemplo](/pt-BR/developers/backend/resources/actors/sample-flows): Mais padrões para timers, conexões, armazenamento e entidades
* [`actors deploy`](/pt-BR/developers/references/cli/commands/actors-deploy): Implante seu actor na Base44

<Note>Esta página foi traduzida usando IA. Para as informações mais precisas e atualizadas, consulte a [versão em inglês](/). </Note>


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