2017-06-19 11 views
0

より多くのスループットを処理するためにUDPサーバーを最適化しようとしています。これはJava IOデータグラムソケット(NIOではなく)に基づいています。 このUDPサーバがUDPパケットを受信すると、このパケットを処理し、処理されたデータをバックグラウンドリソースに送信し、クライアントに応答する必要があります。 現在、このサーバは、着信パケットごとにスレッドを割り当てて処理します。データグラムチャネルをデータグラムソケットと比較してどのような利点がありますか

私はいくつかの記事を読んだことがあると思います。例えば、チャットサーバベースのTCP: のように、開いている接続の数千を同時に管理する必要がある場合があります。おそらくNIOの利点です。 いくつかの接続だけが、指定された時点で要求をサーバーに送信するため、非常に少数のスレッドで多数の接続(スレッドごとの要求)を処理できます。したがって、我々は各接続のスレッドを維持する必要はありません。 これはJava TCP NIOを使用する大きな利点です。

UDPでは、すべてのパケット(データグラム)は事実上自己完結型メッセージであり、各パケットは要求とみなすことができますが、NIO Datagramチャネルを使用しても、依然としてリクエストごとにスレッドを作成する必要があります。

だから、NIOデータグラムチャネルを使用する利点は何ですか?

答えて

1

であっても、我々はNIOデータグラムチャネルを使用して、我々はまだ、各要求

なぜのためのスレッドを作成する必要がありますか?あなたがエコーサーバー、タイムサーバー、...それはあなたが何をしているかによってまったく異なります。

アプリケーションが(ワンショット要求とは異なり、時間やDNSなどの)要求を続けているようなアプリケーションの場合は、クライアントのスレッドを要求ごとにではなく、むしろ考えることができます。

あなたの前提は厳重に監視されていません。

しかし、 NIOは過少であり、ほとんどのアプリケーションでは必要ないことは確かです。ブロッキングモードで何千もの接続のhunredをサポートするサーバーがあります。

+0

お返事ありがとうございました!サーバーはエコーサーバーでもタイムサーバーでもありません。このUDPサーバがUDPパケットを受信すると、このパケットを処理し、処理されたデータをバックグラウンドMQに送信し、クライアントに応答する必要があります。現在、このサーバは、着信するUDPパケットごとに新しいスレッドを作成して処理します。私の質問は、私たちがNIOデータグラムチャンネルを使用すれば、どのような利点と違いがありますか? – Zhi

+0

あなたの説明によれば、ほとんどまたはまったくありません。 – EJP

関連する問題