リクエスト詳細
✨ 既存アプリの改善
対応完了
対象アプリ: RPGストーリーフォージ AI風ドット絵冒険
移動・戦闘AjaxのDB書き込みをレスポンス送信後に遅延実行(fastcgi_finish_request対応)
1. 目的:
マップ移動・戦闘コマンドのAjax APIは、セッションバッファ化により毎ターンDBへ書き込むわけではないが、バッファをDBへフラッシュするタイミング(一定ターン数経過時や画面遷移時)では、クライアントはJSONレスポンスを受け取るまでDB書き込み完了を待つ構造になっている。PHP-FPM/mod_phpのfastcgi_finish_request()を使い、クライアントへの応答送信を先に完了させてからDBフラッシュ処理を実行することで、体感速度(特に定期フラッシュが発生するターン)を安定して高速化する。
2. 具体的仕様:
- lib.phpに共通関数 rpgsf_finish_and_continue(callable $after_response) を追加する。
- JSONレスポンスをob_get_clean()等でバッファし、Content-Length・Content-Typeヘッダーを設定してecho出力。
- function_exists('fastcgi_finish_request') が真なら、echo後に fastcgi_finish_request() を呼び出してクライアントとの接続を切断・レスポンス確定。
- その後に $after_response() を実行し、DBへのstate_json保存やsave_states更新などの重い処理を行う。
- fastcgi_finish_request が使えない環境(mod_php等)では、従来どおり同期的に $after_response() を実行してから出力する(フォールバックで動作を変えない)。
- api/move.php、api/battle_command.php (または該当する既存のAjaxエンドポイント)で、DBへの永続化を伴う分岐(セッションバッファのフラッシュ条件成立時)に限り、この関数を通す。フラッシュ不要な通常ターンは既存の同期処理のまま変更しない。
- 例外・エラー発生時は $after_response 内でtry/catchし、失敗してもクライアントには既に応答済みのため画面表示に影響しない。次回アクセス時に再フラッシュを試みるロジックは既存のセッションバッファ機構をそのまま利用する。
- ログに軽量な失敗記録(error_logへの出力)のみ追加し、ユーザー向け表示は変更しない。
3. 既存機能との整合:
- 通常のレスポンス経路・JSON構造・フロントエンドのfetch/Ajax処理は一切変更しない。
- フラッシュが発生しないターンでは従来と全く同じ処理順序で動作するため後方互換。
- fastcgi_finish_request非対応環境(mod_php等)では自動的に従来の同期処理にフォールバックするため、どの実行環境でも壊れない。
- 永続化ロジック自体(セッションバッファ→DB保存の条件・内容)は変更せず、実行タイミングのみ「応答送信後」に後ろ倒しする改善に限定する。
マップ移動・戦闘コマンドのAjax APIは、セッションバッファ化により毎ターンDBへ書き込むわけではないが、バッファをDBへフラッシュするタイミング(一定ターン数経過時や画面遷移時)では、クライアントはJSONレスポンスを受け取るまでDB書き込み完了を待つ構造になっている。PHP-FPM/mod_phpのfastcgi_finish_request()を使い、クライアントへの応答送信を先に完了させてからDBフラッシュ処理を実行することで、体感速度(特に定期フラッシュが発生するターン)を安定して高速化する。
2. 具体的仕様:
- lib.phpに共通関数 rpgsf_finish_and_continue(callable $after_response) を追加する。
- JSONレスポンスをob_get_clean()等でバッファし、Content-Length・Content-Typeヘッダーを設定してecho出力。
- function_exists('fastcgi_finish_request') が真なら、echo後に fastcgi_finish_request() を呼び出してクライアントとの接続を切断・レスポンス確定。
- その後に $after_response() を実行し、DBへのstate_json保存やsave_states更新などの重い処理を行う。
- fastcgi_finish_request が使えない環境(mod_php等)では、従来どおり同期的に $after_response() を実行してから出力する(フォールバックで動作を変えない)。
- api/move.php、api/battle_command.php (または該当する既存のAjaxエンドポイント)で、DBへの永続化を伴う分岐(セッションバッファのフラッシュ条件成立時)に限り、この関数を通す。フラッシュ不要な通常ターンは既存の同期処理のまま変更しない。
- 例外・エラー発生時は $after_response 内でtry/catchし、失敗してもクライアントには既に応答済みのため画面表示に影響しない。次回アクセス時に再フラッシュを試みるロジックは既存のセッションバッファ機構をそのまま利用する。
- ログに軽量な失敗記録(error_logへの出力)のみ追加し、ユーザー向け表示は変更しない。
3. 既存機能との整合:
- 通常のレスポンス経路・JSON構造・フロントエンドのfetch/Ajax処理は一切変更しない。
- フラッシュが発生しないターンでは従来と全く同じ処理順序で動作するため後方互換。
- fastcgi_finish_request非対応環境(mod_php等)では自動的に従来の同期処理にフォールバックするため、どの実行環境でも壊れない。
- 永続化ロジック自体(セッションバッファ→DB保存の条件・内容)は変更せず、実行タイミングのみ「応答送信後」に後ろ倒しする改善に限定する。
💬 返信 (3)
🛠 開発を開始しました (機能追加 (rpg-story-forge))
ご要望ありがとうございます。AI 開発ワーカーが実装を開始します。
通常 5〜30 分で Pull Request を作成し、レビュー後にリリースされます。
ご要望ありがとうございます。AI 開発ワーカーが実装を開始します。
通常 5〜30 分で Pull Request を作成し、レビュー後にリリースされます。
📝 開発が完了しました
ご要望いただいた内容の実装が完了し、最終チェック段階に入りました。
レビュー (自動) → リリース、の流れで進みます。
もう少々お待ちください。
ご要望いただいた内容の実装が完了し、最終チェック段階に入りました。
レビュー (自動) → リリース、の流れで進みます。
もう少々お待ちください。
✅ リリース完了のお知らせ
ご要望いただいた「RPGストーリーフォージ AI風ドット絵冒険」を実装し、リリースいたしました。
【ご利用方法】
ダッシュボード: https://www.aiapps.jp/?action=dashboard
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=rpg-story-forge
デモ環境は 1 時間以内に自動構築されます:
https://www.aiapps.jp/demo/rpg-story-forge/
ご利用ありがとうございます!
ご要望いただいた「RPGストーリーフォージ AI風ドット絵冒険」を実装し、リリースいたしました。
【ご利用方法】
ダッシュボード: https://www.aiapps.jp/?action=dashboard
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=rpg-story-forge
デモ環境は 1 時間以内に自動構築されます:
https://www.aiapps.jp/demo/rpg-story-forge/
ご利用ありがとうございます!
Echo
Iris