0

我一直在寻找这些信息,但在其他地方找不到:我正在构建一个带有服务器和固定数量客户端的多人游戏。我们的客户端是多线程的(一个线程用于游戏逻辑和可视化,一个线程用于接收消息)并且可以异步接收来自服务器的消息。使用 UDP 实现通信。

如果前一个线程调用 socket.receive() 方法而后一个线程也通过一个使用 socket.receive() 的循环会发生什么?

更具体地说,如果一条消息从服务器到达并且两个线程同时等待接收,那么两个线程是否都收到了消息?如果没有,是否定义了哪个线程将接收数据包?

请注意,两个线程都使用同一个套接字。

4

2 回答 2

1

我不知道,顺便说一句——但我只是一开始就避免出现这种情况。

您说第一个线程用于游戏逻辑和可视化,第二个用于接收消息 - 那么到底为什么第一个线程会调用socket.receive()?那不是它的工作,如果它是用来展示东西的,它当然应该是阻塞的。

有一个专门的线程来接收消息对我来说听起来是一个非常合理的想法 - 所以坚持这个计划而不是混淆两个线程之间的职责。

于 2012-04-15T08:15:35.183 回答
0

消息被接收一次,由第一个线程进入receive()方法。

在后台,这是通过 PlainSocketImpl.receive() 同步的事实来实现的。

于 2012-04-15T10:07:59.447 回答