Java 如何编写一个UDP服务器,为来自不同客户端的n个并发请求提供服务?

Java 如何编写一个UDP服务器,为来自不同客户端的n个并发请求提供服务?,java,multithreading,concurrency,udp,client-server,Java,Multithreading,Concurrency,Udp,Client Server,我将10台设备连接到一个LAN,它们都有一个udp服务器,如下所示: while(true){ serverSocket.receive(receivePacket); dostuff(receivePacket); } serverSocket.close(); 现在让我们假设其中9个设备同时尝试启动与第10个设备的连接。我怎样才能接受全部9,而不仅仅是第一个,这将阻止套接字,直到服务器完成计算?我应该启动一个线程来处理dostuf吗?这会让我从所有同时收到的请求中得到请求吗?一

我将10台设备连接到一个LAN,它们都有一个udp服务器,如下所示:

while(true){
   serverSocket.receive(receivePacket);
   dostuff(receivePacket);
}
serverSocket.close();

现在让我们假设其中9个设备同时尝试启动与第10个设备的连接。我怎样才能接受全部9,而不仅仅是第一个,这将阻止套接字,直到服务器完成计算?我应该启动一个线程来处理dostuf吗?这会让我从所有同时收到的请求中得到请求吗?

一个基本的设计将在线程上负责处理具有所需限制的传入请求,然后将它们传递给工作线程/请求处理线程。当这些工作线程中的每一个都完成时,您需要更新一个共享/全局计数器,以让主线程知道它可以建立新的连接。这将需要一定程度的同步,但它可能非常有趣

我的想法是:

serverThread:
    while true:
        serverLock.acquire()

        if numberOfRequests < MAX_REQUESTS:
            packet = socket.receive()
            numberOfRequests++
            requestThread(packet).run()
        else
            serverMonitor.wait(serverLock);

        serverLock.release()

requestThread:
    //handle packet

    serverLock.acquire()

    if numberOfRequests == MAX_REQUESTS:

    numberOfRequests--
        serverMonitor.pulse();

    serverLock.release()
您需要确保同步是正确的,这只是为了让您了解可以从什么开始。但是当你掌握了窍门,你就可以进行优化和增强。一种特殊的增强功能,也适用于有限数量的请求,称为


无论如何,基本结构与大多数服务器非常相同:一个主线程负责将请求传递给工作线程。这是一个简洁的抽象。

您可以使用线程来解决这个问题。由于java已经有了一个处理线程的API,您只需创建可运行执行器的实例,请看一看。下面是另一个可能有帮助的有用链接:

使用相对较大的线程池,因为udp不需要响应

main方法将作为侦听器运行,线程池将完成其余的繁重工作

请检查此链接