0

この情報を探していましたが、他の場所では見つかりませんでした。サーバーと固定数のクライアントを使用してマルチプレイヤー ゲームを構築しています。私たちのクライアントはマルチスレッド (ゲーム ロジックと視覚化用に 1 つのスレッド、メッセージを受信するための 1 つのスレッド) であり、サーバーからメッセージを非同期的に受信する場合があります。通信は UDP を使用して達成されます。

前者のスレッドが socket.receive() メソッドを呼び出し、後者のスレッドが同様に socket.receive() を使用するループを通過するとどうなりますか?

より具体的には、サーバーからメッセージが到着し、2 つのスレッドが同時に受信待ちをしている場合、メッセージは両方のスレッドで受信されますか? そうでない場合、どのスレッドがパケットを受信するかが定義されていますか?

両方のスレッドが同じソケットを使用していることに注意してください。

4

2 に答える 2

1

分かりませんが、率直に言えば、そもそもそのような状況が発生するのを避けたいだけです。

最初のスレッドはゲーム ロジックと視覚化用で、2 番目のスレッドはメッセージを受信するためのものだとおっしゃっていますが、そもそもなぜ最初のスレッドが を呼び出すのsocket.receive()でしょうか? それはその仕事ではなく、物事を表示することを意図している場合は、確かにブロックする必要があります.

メッセージを受信するための専用のスレッドを持つことは、私には完全に合理的なアイデアのように思えます。そのため、2 つのスレッド間で責任を混同するのではなく、その計画に固執してください。

于 2012-04-15T08:15:35.183 に答える
0

メッセージは、 receive() メソッドに入る最初のスレッドによって 1 回受信されます。

内部的には、これは PlainSocketImpl.receive() が同期されているという事実によって実現されています。

于 2012-04-15T10:07:59.447 に答える