1

假设我有一个带有多个客户端 (UDP) 的服务器。每当它从客户端收到一个数据包时,服务器将花费 1 秒处理该数据包,并在处理后立即将一个新数据包发送给所有客户端。

如果 0.1 秒内有 10 个数据包到达,服务器是否能够做到这一点?换句话说,它是否能够在处理完第一个接收到的数据包后立即向每个客户端发送一个新数据包?(我感觉套接字会被其他 9 个未读数据包“阻塞”)

服务器循环就像:

while (1) {
    read_a_packet()
    process_packet()
    send_new_packet_to_all_clients()
}
4

2 回答 2

1

传入的 UDP 数据包被放入缓冲区以供将来检索。如果您的处理速度慢到足以用数据包填充套接字缓冲区,则将丢弃后续数据包。

另请参阅Linux 套接字缓冲区如何溢出?C++ UDP 套接字数据包队列(也可以查看那里的评论)。

于 2011-10-12T06:32:19.090 回答
0

根据您自己的定义,process_packet()运行需要 1 秒。一个线程一次只能做一件事,所以这样一个单线程中的循环服务器将需要 10 秒来处理 10 个数据包。因此,要么加速process_packet()不到 1 秒,要么运行多个处理线程,以便您可以并行处理多个数据包。

于 2011-10-12T06:34:01.907 回答