gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 06:32:22 27 4
gpt4 key购买 nike

我将 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()

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

尽管基本结构与大多数服务器非常相似:一个主线程负责将请求传递给工作线程。这是一个简洁明了的抽象。

关于java - 如何编写一个 UDP 服务器来为来自不同客户端的 n 个并发请求提供服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8809195/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com