そらいろさんぽ

個人で開発したアプリやウェブサイトの情報をまとめたブログです

うさゴヤ大改修計画

うさゴヤ大改修計画

f:id:soranokurousagi:20150902205613p:plain

こんばんは、くろうさぎです。
今日は私がライフワークとして運営しているうさゴヤの改修計画についてお話したいと思います。

うさゴヤは2011年12月にリリースしてもう少しで4周年目を迎えます。2013年頃から仕事のシステム開発や調査等を優先していたため、うさゴヤ開発にリソースが回せず、現在はほぼ休止状態になっています。今年はそんなうさゴヤにテコ入れしようと内部システムの大幅改修作業を計画しています。

改修のきっかけ

うさゴヤのチャット機能には自作のチャットサーバーを組み込んでいます。このチャットサーバーが非常に曲者で、想定を超える大量のコネクションが発生するとプログラムが通信処理をさばききれず、TCP/IPにTIME_WAITが増加してしまうという問題を抱えていました。この問題が原因でマイルームやオンラインゲームの開発が行き詰まってしまい、チャットサーバーの改修を検討せざるを得ない状況になってしまいました。

一言に改修といっても今までのチャットサーバーとは全く別の仕組みを導入することになりますから、クライアント(Flash)側も新チャットサーバーに合わせて改修作業を行わなければなりません。今年の1月末に先行してお絵描きとチャット部分を新チャットサーバーに入れ替えましたが、突貫工事を続けてきた現行のシステムはメンテナンス性が非常に悪く、今回の改修作業を機にクライアントのプログラムも1から作り直すことにしました。

チャットサーバーの切り替え

新チャットサーバーは無料であることとサーバーアプリケーションがJavaで開発出来るという理由からred5を選びました。red5は本来、動画や音声などを配信するためのメディアサーバーという位置付けですが、ActionScript3のNetConnection.call()を使うことでチャットサーバーとしても運用することが出来ます。red5を導入することにより、大量のコネクションを効率良く安定的に処理することが可能となり、マイルームやオンラインゲームの運用にも十分に耐えられるようになります。

クライアントの最適化

現行のうさゴヤは下記の通信処理を行ってリアルタイムでアバターを動かしています。

f:id:soranokurousagi:20150902205657p:plain
アバターが移動を開始する前に移動座標をチャットサーバーに送信することにより、チャットサーバーへのアクセスを最小限に抑え、TCP/IPのTIME_WAIT増加によるチャットサーバーダウンを防いでいました。自分のアバターを操作した場合であってもサーバーからのレスポンスを待ってからアバターを歩かせていたため、ネットの通信速度が遅い環境ではアバター操作が快適に行えなくなることがありました。

f:id:soranokurousagi:20150902205714p:plain
新クライアントはチャットサーバーのレスポンスを待たずアバターを動かします。チャットサーバーのレスポンスを待つ必要がなくなり、アバターの操作感が今までとは比べ物にならないほど良くなります。アバター移動中の座標をチャットサーバーに送り続けることにより、各クライアントとのより厳密的な同期処理も行えるようになりました。

お絵描き機能

ソラシルの開発ソースをうさゴヤに組み込みます。以前のお絵描きよりも描きやすくなります。

せっかくなので…

サイトデザインもチャットルームを中心としたデザインにしたいと思っています。今のデザインはサイトの内容が伝わりづらいですので…

おわりに

現行のシステムから流用出来るソースがいくつか存在しますが、基本的には1から作り直すことを前提として改修作業を進めています。出来れば4周年記念に合わせてリリースしたいですね〜。(作業量的にちょっと厳しそうですが…)
もう少し時間がかかってしまいますが、気長にお待ち頂けると嬉しいです。今後ともうさゴヤをよろしくお願いします。