質問: 下記を参考にし、cakephp3に動画のストリーミング配信を組み込んでいます。 ストリーミング配信はできたのですが、一旦ブラウザで動画再生を始めると、 ブラウザバックなども即できない状態となってしまいます。 (PCのChromeでは発生しますが、Firefoxでは発生しません。) 原因が分からず、下記のような対応を行ってみましたが、改善しません。 ・apacheでkeepaliveを有効にしてみる ・apacheのworkerでマルチプロセス・マルチスレッドを有効にしてみる おそらくストリーミング配信のphpの処理に対して、リクエストを占有するような状態に なってしまっているのだと思いますが、このままでは動画配信だけ サーバー分けするような解決策しか見出せません。 解決策、または、とっかかりになるような情報等ありましたら、よろしくお願いします。 追記 *********************************** 当該処理をphpで実行すると正常に実行される為、CakePHPの問題のようです。 CakePHPで同一セッションで同時に2つのアクションが実行されません。 ただこの動作は正しい動作といえば正しい動作なので、動画のストリーミングは、 素のphpで実行することにしました。
回答: 恐らく、セッションの排他制御によるものかと思います。 デフォルトでCakePHPが使用しているPHPのセッション管理は、セッションを開始してから終了するまでそのセッションをロックするため、同時に複数のリクエストでセッションを開始することができません。 PHPでセッションの排他ロックを解除する | Time to live forever CakePHP3の場合、 * php.ini で `session.auto_start` が On/1/trueになっているならリクエスト開始時 * 自分でセッションの読み書きをした時 * DebugKit が有効になっているならリクエストの処理が終わる直前 などのタイミングでセッションが開始され、PHPの処理が終わると同時にセッションが終了します。 もしこれが原因だとすれば、セッション管理にデータベースを使うようにしたり、あるいは時間のかかる処理の前に `session_write_close()` を呼んでセッションを解放することで改善する可能性があります。 * 同一セッションで複数のアクションを同時に呼べなくなったときの対処法 - 廟攻 * cakephpでsessionロックしてしまって同時実行できない問題 | yamake.netのメモ帳