2012-04-15 65 views
0

我正在尋找這些信息,並且無法在其他地方找到它: 我正在用服務器和固定數量的客戶端構建多人遊戲。 我們的客戶是多線程的(一個用於遊戲邏輯和可視化的線程,一個用於接收消息的線程),並且可以異步接收來自服務器的消息。通訊使用UDP進行。在多線程環境中使用的UDP Socket.receive()方法

如果前一個線程調用socket.receive()方法而後一個線程通過使用socket.receive()的循環,會發生什麼?

更具體地說,如果消息從服務器到達並且兩個線程同時等待接收,那麼兩個線程都收到消息嗎? 如果沒有,是否定義哪個線程將接收數據包?

請注意,兩個線程都使用相同的套接字。

回答

1

我不知道,副手 - 但我只是避免這種情況出現在第一位。

你說第一個線程用於遊戲邏輯和可視化,第二個線程用於接收消息 - 那麼爲什麼第一個線程會調用socket.receive()?這不是它的工作,如果它是爲了展示事物,它肯定應該被阻止。

擁有一個專門用於接收消息的線程聽起來對我來說聽起來像一個完全合理的想法 - 所以堅持這個計劃而不是混淆兩個線程之間的責任。

+0

是的 - 如果GUI線程想要來自對端的東西,它應該通知網絡線程獲取它。 – 2012-04-15 08:25:20

0

通過第一個線程接收消息一次以輸入receive()方法。

這是通過PlainSocketImpl.receive()同步這一事實實現的。