1

netty を使用してクライアント - サーバーの例を作成しました。サーバーとクライアントのハンドラーを定義しました。基本的に、クライアントからサーバーに接続し、いくつかのメッセージを送信します。受信したメッセージはすべて返送されます (メッセージの内容は大文字に変換されます)。サーバー側とクライアント側で受信したメッセージに対するすべての作業は、定義されたハンドラーによって行われます。

しかし、ハンドラーではなく、クライアントで直接メッセージの一部を使用するか、より適切に受信/受け入れたいと思います。したがって、私の質問は、ハンドラーではなく、クライアントプログラムで直接メッセージを受信するリスナーを持つことができるということです。薄いのは、定期的に新しいものをチェックするタイマー(またはループ)のようなものを使用して、新しいクライアントオブジェクトを作成した(実行可能な)プログラム(基本的にメインメソッドを持つクラス)内で受信したメッセージにアクセスしたいということですメッセージ。

誰かがこの問題で私を助けてくれれば幸いです。または、少なくとも netty で可能かどうか教えてください。

4

1 に答える 1

1

netty のイベントベースのモデルをポーリング モデルに変換しようとしています。これを行う簡単な方法は、メッセージ キューを作成することです。

//import java.util.concurrent.BlockingQueue;
//import java.util.concurrent.LinkedBlockingQueue;
BlockingQueue queue = new LinkedBlockingQueue();

ハンドラーがコンストラクターの引数としてキューを使用できるようにする必要があります。メッセージが到着したら、それをキューに入れます。

// Your netty handler:
queue.put(message);

クライアント側で、メッセージのキューをポーリングできます。

// The polling loop in your program:
message = queue.poll(5, TimeUnit.SECONDS);

BlockingQueueでは、メッセージが到着するまで待機する ( )、メッセージが到着するまで一定take()時間待機する ( poll(long, TimeUnit))、または現在使用可能なメッセージがあるかどうかを確認するだけ( ) のいずれかを選択できますpoll()

設計の観点から見ると、このアプローチは、netty が提供するはずのノンブロッキング IO の利点を台無しにします。Socket同じ最終結果に対して通常の接続を使用することもできます。

于 2011-09-14T07:55:55.450 に答える