[過去ログ]
Javaで作るスタンドアローンゲーム (484レス)
Javaで作るスタンドアローンゲーム http://mevius.5ch.net/test/read.cgi/gamedev/1356591858/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
366: 名前は開発中のものです。 [sage] 2014/11/25(火) 08:11:55.29 ID:mNAq4UK+ ソース見た。 エラーの原因は、サーバ側では送信のたびにObjectOutputStreamを作り直してるのに、クライアント側では同じObjectInputStreamを使い続けていることだ。 作り直すなら両方とも作り直す(この場合resetは要らない)、使い続けるなら両方とも使い続ける。混ぜてはいけない。 あと、現時点では大丈夫かもしれないが、潜在的な問題がある。 受信がブロックするのは当然なので別スレッドにするのは自然だけど、実は送信もブロックするから別スレッドにした方がいいんだ。 TCPには一定サイズのバッファがあって、相手側が読み出してくれなければ、バッファが一杯になった時点でそれ以上書き込めなくなり、ブロックする。 相手側が読み出してるつもりでも、例えば何かネットワークのトラブルでデータが届かなくなれば、同じようになる。 サーバ側で synchronized (this.recvMessageQueue) { } の中で sendClients 呼んでその中で writeObject してるけど、こういうロックを握ったままブロックする可能性があるのは非常によくない。 受信キューを握ったままブロックすると受信スレッドがみんな動けなくなるし、そうなるといずれクライアントの送信側もバッファが一杯になってみんな止まってしまう。 あとは、 clientSocketList が複数のスレッドから読み書きされてるから synchronized するべき。 いちいち synchronized するのが面倒なら元からスレッドセーフな CopyOnWriteArrayList を使うという手もある。 キューも LinkedBlockingQueue とか使えば synchronized する必要なくなる。 まぁこのへんはどっちでもいいけど。 ObjectIOストリームは、性能面では劣るけど、開発は楽だから、使いたければそれでいいんじゃない。 他の方法といっても、ファイルと一緒で、フォーマットを決めて読み書きするだけだよ。 いわゆるType-Length-Value的なやり方が普通だと思うけど、例えば文字列化して行単位で送るとか、XML形式で送るという方法もなくはない。 こういうのは性能やらメンテナンス性やら開発速度やらのトレードオフだから、好みの方法を使えばいいと思うよ。 http://mevius.5ch.net/test/read.cgi/gamedev/1356591858/366
418: 名前は開発中のものです。 [] 2015/02/24(火) 00:16:43.29 ID:zq7H1j8+ >>415 ~ 417 変換系の整理ですか... int indexTPX等で表示画面の左上座標を算出して後は表示画面の幅や高さでそれぞれの座標計算は出来るのですが。 /** private Area[][] map * [1][2][3] * [4][5][6] 5 -> はじまりの町 * [7][8][9] */ 1,2,4,5の中心付近にいて4つのエリアを描画するとき、 どうやって各エリア情報を取得して使用するかが確かに整理できない気がします。 http://mevius.5ch.net/test/read.cgi/gamedev/1356591858/418
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.020s