2012-04-15 14 views
0

この情報を探していて、他の場所には見つかりませんでした。 サーバーと固定数のクライアントでマルチプレイヤーゲームを構築しています。 クライアントはマルチスレッド化されています(ゲームロジックとビジュアライゼーション用に1つのスレッド、メッセージを受信する1つのスレッド)、サーバーから非同期にメッセージを受け取ることがあります。 通信はUDPを使用して達成されます。UDP Socket.receive()メソッドがマルチスレッド環境で使用されています

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

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

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

答えて

1

私は分かりませんが、最初はそのような状況が起こるのを避けるだけです。

最初のスレッドはゲームロジックとビジュアライゼーション用で、2番目のスレッドはメッセージを受け取るためのスレッドです。なぜ、最初のスレッドでsocket.receive()を呼び出すのですか?それはその仕事ではなく、物事を表示することが意図されているのであれば、確かにブロックしているはずです。

メッセージを受信するための専用のスレッドを持っているのは、私にとってはまったく合理的な考えです.2つのスレッド間の責任を混ぜるのではなく、その計画に従ってください。

+0

はい - GUIスレッドがピアから何かを求めている場合は、ネットワークスレッドに通知する必要があります。 –

0

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

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

関連する問題