【问题标题】:UDP Socket.receive() method used in multithreaded environments多线程环境中使用的 UDP Socket.receive() 方法
【发布时间】:2012-04-15 08:12:37
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java multithreading udp


    【解决方案1】:

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

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

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

    【讨论】:

    • 是的 - 如果 GUI 线程想要从对等点获得某些东西,它应该向网络线程发出信号以获取它。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多