【问题标题】:Handling multiple clients with UDP使用 UDP 处理多个客户端
【发布时间】:2015-10-25 02:20:41
【问题描述】:

想象一个 UDP 服务器:

while (true) {
    try {
        socket.receive(packet);
        // handle packet (potentially CPU-intensive)
    } catch (IOException e) {
        e.printStackTrace();
    }
}

困扰我的是我只有 1 个线程来处理来自所有客户端的所有数据包。我假设我的服务器无法启动多个线程以在同一个套接字上接收数据包?虽然我当然可以在单独的线程中处理数据包,但我仍然只有 1 个线程来接收数据包,而且无论将数据包转发到另一个线程需要多短的时间,它仍然是一个服务器不会听到传入的窗口数据包。

所以我的问题是:如果服务器当前没有在server.receive() 中被阻止,发送到服务器的数据包会丢失,还是会在下次调用该方法时排队?如果他们迷路了,我该如何处理多个客户?

【问题讨论】:

    标签: java udp


    【解决方案1】:

    如果服务器当前没有在 server.receive() 中被阻止,发送到服务器的数据包是否会丢失

    没有。

    或者他们是否会在下次调用该方法时排队?

    它们在套接字接收缓冲区中排队,如果有空间,则它们丢失。

    如何处理多个客户?

    要么以足够快的速度处理每个数据包,以使套接字接收缓冲区永远不会溢出,要么启动一个新线程来处理每个数据报。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-23
      • 1970-01-01
      • 2013-04-21
      • 2021-04-09
      • 1970-01-01
      • 2016-02-14
      • 1970-01-01
      • 2017-11-29
      相关资源
      最近更新 更多