【发布时间】: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() 中被阻止,发送到服务器的数据包会丢失,还是会在下次调用该方法时排队?如果他们迷路了,我该如何处理多个客户?
【问题讨论】: