3Dネット対戦ゲーム作成日記 part30

ゲーム制作
スポンサーリンク

グラフと、ログインウィンドウにバージョンを表示するようにしました。
ちなみに、このグラフもmmo!が元ネタだったりします・・・!

サーバーとクライアントの安定のために色々しました。
サーバーは、クライアント1人に付き、スレッドを3つ作成します。
1つは、通信の入力用スレッド、2つ目は、通信の出力用スレッド、3つめは総まとめのスレッドです。

スレッドを意識したプログラミングをしなくてはいけないのですが、
スレッドに関しては、全くの未熟で、当初何度もフリーズしました。
(というかMessageEvent、MessageListenerとか使えばよかったですね。知りませんでした。無知は罪ですよ。)

最初やっちゃったのは、synchronizedをどこもかしくも適当につける。
これ、多分やっちゃいけないんですよね。いや、目的があるならいいのですが、
なんか複数のスレッドがアクセスする可能性があるからと、つけまくりました。
結果、デッドロックが起こりました^^
今は、適当にへらして、また負荷テストしてる途中です。

ver12のときに、複数の人が同時に落ちると、止まるという現象がおきたのですが、
これもsynchronizedが多分原因でした。
それは、「落ちると、終了処理して、自分が存在するクライアントに、自分を消去するように通信する」というもの。
これが原因で、1人が落ちて終了処理しているのに、ここにまた、自分を消去するようにって命令出すもんだから。

他の問題として、keep alive問題というもの。落ちてるのに、JavaのSocketがエラーを発見できずに、
落ちているクライアントに対して、通信をしようとするから、そこでまたストップ。
一応、いろいろやってみたのですが、直ってたらいいですね。

まあとにかく、内面的な機能更新が多いです。
敵とか、レベルとか、チームとか、冒険とか、まだそういうゲーム性なものがないので、やっていてもつまらないですね。
何か、増えれば楽しそうなのですが。サーバーの安定化と常時起動化が先決ですね。

思い切って、重要そうなとこもsynchronized外したら、同時切断もフリーズせずにうまくいくようになった。カオス。
これでプログラムっていいのだろうか。心配になってくる。

コメント

タイトルとURLをコピーしました