```typescript
import { Actor, type Rpc } from "actor-core";
export interface State {
messages: { username: string; message: string }[];
}
export default class ChatRoom extends Actor {
// initialize this._state
_onInitialize() {
return { messages: [] };
}
// receive an remote procedure call from the client
sendMessage(rpc: Rpc, username: string, message: string) {
// save message to persistent storage
this._state.messages.push({ username, message });
// broadcast message to all clients
this._broadcast("newMessage", username, message);
}
}
```
Everything you need to build realtime, stateful backends
ActorCore provides a solid foundation with the features you'd expect for modern apps.
| Feature |
ActorCore |
Durable Objects |
Socket.io |
Redis |
AWS Lambda |
| In-Memory State |
|
|
|
|
|
| Persisted State |
|
|
|
|
|
| RPC |
|
|
|
|
|
| Events (Pub/Sub) |
|
|
|
|
|
| Scheduling |
|
|
|
|
|
| Edge Computing |
¹ |
|
|
|
|
| No Vendor Lock |
|
|
|
|
|
= requires significant boilerplate code or external service
¹ = on supported platforms