-1

複数のクライアントでボールを同時に (リアルタイムで) 動かすことに関する、NIO を使用したリアルタイムの物理シミュレーションを設計しました。

現在、文字列解析で 1 つのボールの座標を送信していますが、複数のボールを移動し、文字列を送信する以外の一般的なメカニズムが必要なため、サーバーに 4 つのボールを作成します。

各ボールの座標がクライアント上の同じボール (私もクライアント上で作成したもの) に対応し、サーバーから受け取った座標に従って各ボールを移動できることをどのように実現できるか。

これは、各ボールの参照を送信することで実現する必要がありますが、Java バイト バッファと NIO 全体でそれを実現する方法がわかりません。

私は実装に問題があります。誰かがコード例で私を助けてくれれば、それは素晴らしいでしょう。とにかく、文字列以外のオブジェクト座標などのシミュレーションデータを送信するための一般的なものは許容できます(誰かが同様の作業をした場合)が、実装する必要があります私が説明したユースケース。

ありがとう、

ジビララ

PS :反対票を投じる質問の理由を教えてください。

4

2 に答える 2

0

KryoNetでRMI を使用すると、リモート メソッド呼び出しを使用するだけで、呼び出しが十分に効率的になり、心配する必要がなくなります。このサイトには、開始するための RMI の例があります。シミュレートされたボールとのリアルタイムのクライアント対話が必要な場合は、もう少し複雑になります。UDP を使用する必要があるかもしれませんが、それ以外の場合は位置を送信するだけです。おそらくワールドオブジェクトのメソッドに情報を統合するようにしてください。

于 2011-04-30T00:23:45.357 に答える
0

まず最初に:

動いているものなどを表すには、オブジェクト ID が必要です。オブジェクトには、Java の他のオブジェクトと同じようにプロパティがあります。この場合、ボールには座標があります。おそらく、ボールは形状を持っている可能性があります (一定の R を持つ完全な球であることに加えて)。最初にオブジェクトの説明またはタイプを送信し、次にそのプロパティのいくつかの変更を送信したいとします。オブジェクト ID には、単一の long または UUID を使用できますが、2 つの long (16ytes) で表されます。

標準の Java シリアライゼーションを使用することもできますが、この問題に精通していない限り、使用しないことをお勧めします (しかし、その時点で質問したことはないでしょう)。

独自の文字列ベースの表現を置き換えるためにバイナリ プロトコルを作成することは難しくありませんが、初心者にとっては簡単な作業でもありません。

NIO 自体は ByteBuffer を備えていますが、データを表す外部/ストリーム モデルに影響を与えるべきではありません。「ボール」を何らかの意味のある方法で byte[] に表すことができる場合は、ByteArray を使用して同じことを実現できます。

于 2011-03-20T19:22:13.057 に答える