最大16同時再生
今回開発しているAGMServerのWeb視聴機能では、同時に複数ユーザーが任意の動画/音声ファイルを視聴可能にしている。
もっとも、この機能は、サーバーが多くのユーザーにサービスを同時提供する事を目的としている訳でもない。
なので、同時再生可能数は16に制限しているのだが、実際問題としては、DVD画質(854x480)の30FPS動画を視聴しようとすると、10Mbps程度のネットワーク帯域を消費するので、16も同時再生しようとすると、WiFi運用だと、ネットワーク帯域が先に足りなくなる場合も多いかもしれない。
にも関わらず、同時再生数に制限を設けているのは、Web視聴機能の場合、視聴者が正しいシーケンスで視聴を終了する保証はないからだ。
具体的には、視聴者が動画を選択して動画の再生を開始すると、AGMServer内部では、その視聴用の環境を構築するのだが、ユーザーが正常なシーケンスで視聴を終了しなかった場合、その環境は、基本的には、破棄されずにそのまま残るので、どこかのタイミングで、その環境を消去しなければ、AGMServerの使用メモリ量だとか、CPU使用率が無意味に増加してしまう訳だ。
なので、AGMServer的には、視聴環境にウォッチドッグタイマーを持たせていて、ユーザーページからのアクセスが2秒間くらいなかった場合、まず、その再生環境で動画が再生中だった場合、その再生を停止する。
次に、既に16ユーザーが存在する状況で、新しいユーザーの追加が要求された場合、最も古いアクセスしかないユーザーを強制的に削除して、代わりに、新しいユーザーを追加する様にしている。
と、言う事で、AGMServerのWeb視聴機能では、最大、16ユーザーが異なる動画を同時視聴できる様に作ってあるのだが、これは、16ユーザーを同時サポートするため、というよりは、16ユーザーも同時にアクセスしてくる事はない筈なので、内部リソースが16個も溜まったら、古い分から強制削除していく! という仕組みにしてある訳だ。
なので、普通は、AGMServerのWeb視聴機能を使っていて、強制的に利用中のユーザーが削除される事はないのだが、もし、削除された場合には、そのページへのアクセスは、Not Found Errorで返される事になるので、継続視聴は出来なくなるのだが、それ以外、特に問題が発生する事はない筈だ。
ちなみに、ウォッチドッグタイマーでタイムアウトが発生しただけでは、ユーザーを削除しない様にしているのは、Webブラウザを動作させているクライアントがスリープ状態になった場合を想定しているからだ。
つまり、クライアント側がスリープ状態になると、AGMServerへのアクセスは発生しなくなるので、ウォッチドッグタイマーでタイムアウトが発生するのだが、スリープが解除された後には、その再生を継続できた方が便利なので、こういう二段階の方式を採っている訳だ。
それでは、16ユーザーに達するまでは、内部リソースは削除されないのか、というと、その通りなので、暫く使っていると、AGMServerの使用メモリ量は、起動直後よりも増加する筈なのだが、今時のPCに搭載されているメモリ量を鑑みれば、大した増加量にはならない筈だ。

