コンテンツへスキップ

オンラインアップデートの仕組みを考えてみる

ちょっと前にオンラインアップデート用のEXEを作った事があったので、 今回はその事について。

本当は本体のFormCreateイベント辺りに1度だけ実行すべきなのかも知れないですが、 違う言語ですでに生成されたEXEだった事もあり、別途EXEとして作成してみました。

まず、最初にオンラインゲームのアップデート手順を色々と参考にして、自分なりに手順を考えてみました。

・対象EXEが起動していない事を確認する(起動していた場合はアップデートEXEを終了) ・サーバーに接続する ・バージョン情報とCRC情報、ファイルサイズをサーバから取得する ・クライアントの現在バージョンと最新バージョンを比較する ・バージョンが古い場合はサーバから新しいデータを取得する ・データの転送が終了したのち、CRCとファイルサイズを照合する ・ファイルが破損していた場合は直ちに取得したデータを削除して、終了する ・照合に成功した場合は、古いファイルを削除し、新しいファイルを移動する

という、流れです。

その際、一番迷ったのがサーバーです。 HTTPでアクセスする場合、無論、HTTPサーバに接続してDLするわけですが、 この場合、Webブラウザ等からもアクセスできてしまうので、色々と問題がありそうです。 (制限などを設ければいいかもしれないが) さらに、バージョン情報の問い合わせを行う際に、専用のファイルを毎回用意する必要があり、 パッチ準備の負担も大きくなってしまいます。(補助EXEを作れば随分マシになりますが)

FTPで接続する場合、一番の問題点はアカウント情報でしょうか。 EXEにアカウント情報を組み込むのは、例えanonymousでもいい感じには思えません。

以上の事を考えると、パッチ専用のサーバは用意すべきなのか?と言うことです。 自前でパッチ用サーバを作れば、情報管理はEXE上で行えるので、ファイルを用意する必要がなくなります。(規模にもよりますが) さらに、HTTPからの要求はすべて無視できるので何かと好都合です。また、パッチの失敗回数など、特定の情報も取得できます。 問題点と言えば、HTTPサーバと併用して使用するのでサーバの負担が増加する事と、セキュリティの問題ですかね。

最近はよくオンラインアップデート機能を見かけますが、HTTPがメジャーなんでしょうかね? また、実行中のEXEを終了せずにアップデートが可能な物が多いですが、あの中は一体どうなっているんでしょうか・・・。

© 2003 Kurusugawa Computer Inc.