使用UDP

时间:2015-10-25 02:20:41

标签: java udp

想象一下UDP服务器:

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

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

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

1 个答案:

答案 0 :(得分:1)

  

如果服务器当前未在server.receive()

中被阻止,那么发送到服务器的数据包是否会丢失

没有

  

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

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

  

如何处理多个客户端?

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