Skip to main content
開発者向けドキュメントを表示しています
このドキュメントは、Base44 開発者プラットフォームで作業する開発者向けです。
これらのサンプルフローを、実装の出発点として活用してください。

クライアントをセッションに接続する

フロントエンドでライブセッションに参加し、アクターとメッセージを送受信する必要がある場合は、クライアントをアクターセッションに接続します。 クライアントをセッションに接続するには:
  1. base44.actors.ActorName(sessionId) を呼び出してセッションを選択します。
  2. .connect() を呼び出して WebSocket 接続を開きます。
  3. conn.subscribe() を呼び出して、アクターからのメッセージのリスナーを登録します。
  4. conn.send() を呼び出して、アクターにメッセージを送信します。
次の例では、chatRoom アクターのセッションに接続し、メッセージをリッスンして、メッセージを送信します。
接続について詳しくは、接続 を参照してください。

tick を実行する

クライアントがセッションにいる間、一定の間隔で処理を繰り返す必要がある場合は、tick を実行します。たとえば、ゲームの状態のブロードキャストや、ラウンドのタイマーの更新です。 tick を実行するには:
  1. tickIntervalMs に間隔の長さをミリ秒で設定します。
  2. shouldTick() を実装し、tick を続ける場合は true を、停止する場合は false を返します。
  3. handleTick() で、各間隔の処理を実行します。
次の例では、セッションに 2 つ以上のクライアントがいる間、毎秒 tick し、tick ごとにカウントダウンをブロードキャストします。
tick について詳しくは、タイマーハンドラーと設定 を参照してください。

wake をスケジュールする

セッションがアクティブかアイドルかに関係なく、特定の時刻に 1 回処理を実行する必要がある場合は、wake をスケジュールします。たとえば、30 秒後のターン終了や、空のロビーのクローズです。 wake をスケジュールするには:
  1. キーと時刻を指定して schedule() を呼び出し、wake を設定します。
  2. handleWake() でキーを確認し、その wake の処理を実行します。
  3. wake が不要になったら、キーを指定して cancelSchedule() を呼び出します。
次の例では、ターンの開始時にターンのタイムアウトをスケジュールし、タイムアウトがトリガーされるとメッセージをブロードキャストします。
wake について詳しくは、タイマーハンドラーと設定 を参照してください。

クライアント接続を管理する

セッションに参加できる人を決めたり、特定のクライアントに返信したり、セッション内のすべてのクライアントに送信したりする必要がある場合は、クライアント接続を管理します。 クライアント接続を管理するには:
  1. handleConnect() で conn.identity を確認し、conn.reject() を呼び出してクライアントを拒否します。
  2. conn.send() を呼び出して、そのクライアントにのみ返信します。
  3. handleMessage() で broadcast() を呼び出し、接続中のすべてのクライアントに送信します。送信者を識別するには、conn のフィールドをメッセージに含めます。
次の例では、匿名のクライアントを拒否し、接続してきたクライアントに履歴を送信し、送信者のユーザー ID とともにメッセージをブロードキャストします。
接続について詳しくは、接続 を参照してください。

セッションデータを永続化する

値をアイドル期間後も残す必要がある場合は、セッションデータを永続化します。たとえば、盤面、履歴リスト、現在のターンです。 セッションデータを永続化するには:
  1. handleStart() で、this.storage から値をクラスフィールドに読み込みます。
  2. 変更のたびに this.storage.put() を呼び出して、更新した値を保存します。
  3. セッションをリセットするには、this.storage.delete() または this.storage.deleteAll() を呼び出します。
次の例では、開始時に盤面を読み込み、手ごとに保存し、最後のクライアントが切断したときにストレージをクリアします。
ストレージについて詳しくは、ストレージ を参照してください。

セッションからエンティティデータを書き込む

セッションでアプリのレコードを作成または更新する必要がある場合は、エンティティデータを書き込みます。たとえば、最終スコアや完了した注文です。 セッションからエンティティデータを書き込むには:
  1. 書き込む前に、受信メッセージを検証します。
  2. conn.identity.userId からユーザー ID を読み取ります。
  3. 昇格したアクセスには this.client.asServiceRole を使用します。セッション ID などの安定したキーで書き込むと、ハンドラーが繰り返し実行されても同じレコードが更新されます。
次の例では、認証済みのクライアントの最終スコアを保存します。同じセッションで後から保存すると、そのレコードが更新されます。
エンティティへのアクセスについて詳しくは、エンティティへのアクセス を参照してください。

シークレットが必要な処理でバックエンド関数を呼び出す

アクターは secrets.get() でアプリのシークレットを読み取れます。API キーを使って外部 API を呼び出すなど、ハンドラーでシークレットを使う処理が必要な場合は、バックエンド関数 を呼び出すことをおすすめします。関数はシークレットを読み取り、シークレットではなく結果を返します。 アクターからバックエンド関数を呼び出すには:
  1. secrets.get() でシークレットを読み取り、処理を行って結果を返すバックエンド関数を作成します。
  2. ハンドラーで、関数名と送信するデータを指定して this.client.functions.invoke() を呼び出します。
  3. 結果をセッションで使用します。たとえば、接続中のクライアントにブロードキャストします。
次の例は、API キーを読み取って翻訳を返すバックエンド関数です。
次の例では、アクターからその関数を呼び出し、結果をブロードキャストします。

関連項目

このページは AI によって翻訳されました。最も正確で最新の情報については、英語版 を参照してください。