想象一下UDP服务器:
while (true) {
try {
socket.receive(packet);
// handle packet (potentially CPU-intensive)
} catch (IOException e) {
e.printStackTrace();
}
}
让我感到困扰的是,我只有一个线程来处理来自所有客户端的所有数据包。我假设我的服务器无法启动多个线程来接收同一套接字上的数据包?虽然我当然可以在单独的线程中处理数据包,但我仍然只有1个线程来接收数据包,而且无论将数据包转发到另一个线程所需的时间有多少,它仍然是服务器无法听到传入的窗口分组。
所以我的问题是:如果服务器当前没有在server.receive()
中被阻止,那么发送到服务器的数据包会丢失,还是在下次调用该方法时排队等待?如果他们迷路了,我该如何处理多个客户?
答案 0 :(得分:1)
如果服务器当前未在server.receive()
中被阻止,那么发送到服务器的数据包是否会丢失
没有
或者下次调用该方法时它们是否排队?
如果有空间,它们会在套接字接收缓冲区中排队,否则它们会丢失。
如何处理多个客户端?
要么足够快地处理每个数据包,以便套接字接收缓冲区永远不会溢出,要么启动一个新线程来处理每个数据报。