2012-04-15 62 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()同步这一事实实现的。