mcpField
S
serverpod-server-events

serverpod-server-events

github.com/serverpod開発3.3k43 回インストール1 日前に更新
リポジトリ

serverpod-server-events について

Serverpod Server Eventsは、Serverpodサーバー向けの名前付きチャンネルによるメッセージング機能です。サーバー側のイベント処理を構築でき、Redisの有効時にはクラスタ間にも配信できます。

主な機能

  1. 01名前付きチャンネルへのシリアライズ可能なメッセージ投稿
  2. 02ローカルまたはグローバルな配信範囲の選択
  3. 03ストリームによるメッセージ受信
  4. 04チャンネルリスナーの登録と削除
  5. 05セッション終了時のリスナー解除

活用シーン

  1. 01サーバー上でユーザー更新を通知
  2. 02単一サーバーインスタンス内にイベントを限定
  3. 03Redisでクラスタ間にイベントを送信
  4. 04型付きストリームでイベントメッセージを処理

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/serverpod/serverpod --skill serverpod-server-events

インストール後、Claude Code で/serverpod-server-eventsを入力して読み込まれたか確認します。

詳細

Serverpod サーバーイベント

名前付きチャネルでの、session.messages を介したイベントメッセージングです。メッセージはシリアライズ可能なモデルである必要があります。デフォルト(MessageScope.auto)では、Redis が有効な場合はメッセージがクラスター全体に配信され、無効な場合はサーバーインスタンス内でのみ配信されます。

送信

await session.messages.postMessage('user_updates', UserUpdate(...));

// Restrict delivery with a scope:
await session.messages.postMessage('user_updates', message, scope: MessageScope.local);
await session.messages.postMessage('user_updates', message, scope: MessageScope.global);

MessageScope.local は、このサーバー内でのみ同期的に配信します。MessageScope.global には Redis が必要で、有効になっていない場合は StateError がスローされます。Redis が有効な場合、配信は非同期かつベストエフォートで行われ、リスナーは投稿されたメッセージインスタンスではなく、デシリアライズされたコピーを受け取ります。

受信

ストリーム:

var stream = session.messages.createStream<UserUpdate>('user_updates');
stream.listen((message) => print('Received: $message'));

チャネル上のメッセージが型 T でない場合、ストリームはエラーを出力します。シリアライズ可能な型を正確に指定するか、意図的に共有基底型を使用してください。

リスナー:

session.messages.addListener<UserUpdate>('user_updates', (message) {
  print('Received: $message');
});

どちらもローカルメッセージとグローバルメッセージを受信します。ストリームとリスナーは、セッションが閉じると削除されます。手動で削除するには、session.messages.removeListener(channel, callback) を使用してください。モデルは継承をサポートしているため、サーバーイベント用に完全に型付けされたインターフェースを作成する場合に便利です。

コメント