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 秒かかります。スレッドは一度に 1 つのことしか実行できないため、1 つのスレッドでこのようなループ サーバーを実行すると、10 パケットを処理するのに 10 秒かかります。したがって、速度process_packet()を 1 秒未満にするか、複数の処理スレッドを実行して、複数のパケットを並行して処理できるようにします。

于 2011-10-12T06:34:01.907 に答える