#Reactor Reactor パターン
これまでのところ、高性能ネットワーク プログラミングでは反応を避けることはできません。 。 Nginx、Redis、Netty など、多くの有名なサーバー ソフトウェアやミドルウェアは、リアクター モードに基づいて実装されています。
リアクター パターンは、高性能ネットワーク プログラミングのために必ず知っておくべきパターンです。
Reactor の概要
リアクター モードは、2 つの主要な役割で構成されます: Reactor リアクター スレッドとハンドラー プロセッサー:
(1) Reactorリアクター スレッドの責任: IO イベントに応答し、それらをハンドラー プロセッサーに配布する責任があります。
(2) ハンドラー プロセッサの責任: ビジネス処理ロジックのノンブロッキング実行。
上記のリアクター モードの定義から、このモードには魔法のようなものは何も見えません。もちろん、リアクター パターンには、単純なものから複雑なものまで、さまざまなバージョンがあります。前の定義によれば、これは最も単純なバージョンにすぎません。
マルチスレッド OIO の致命的な欠陥
Java OIO プログラミングでは、最初の最も原始的なネットワーク サーバー プログラムは while ループを使用してポートを継続的に監視します。新しいつながりのために。存在する場合は、処理関数を呼び出して完了します。サンプル コードは次のとおりです:
@Test
public void client() throws IOException {
Socket client = new Socket("127.0.0.1", 9999);
Writer writer = new OutputStreamWriter(client.getOutputStream());
writer.write("Hello World");
writer.flush();
writer.close();
client.close();
}
@Test
public void server() throws IOException {
ServerSocket server = new ServerSocket(9999);
while (true){
Socket socket = server.accept();
Reader reader = new InputStreamReader(socket.getInputStream());
print(reader);
reader.close();
socket.close();
server.close();
}
}
ログイン後にコピー
このメソッドの最大の問題は、前のネットワーク接続のハンドル (ソケット) が処理されていない場合、後続の接続リクエストを受信できないため、後続のすべてのリクエストがブロックされ、サーバーのスループットが低下します。サーバーにとって、これは深刻な問題です。
推奨チュートリアル: 「
Java」
以上がJava Reactor リアクター パターンの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。