私はほとんどがNettyにありますが、1つのコンセプトはまだ私を暗示しており、チュートリアルなどで何も見つかりません。まず、Nettyは非同期であることを理解していますが、クライアントがサーバーを呼び出し、ハンドラを超えて応答を得る方法が必要です。私はもっと説明しましょう。Netty - クライアントでサーバレスポンスを取得する方法
私は以下のようにクライアントを持っています。そして、私はそれがブートストラップされていることを理解していることに注意してください、そして、それぞれの呼び出しで新しい接続が確立されます、それは例をより小さくそしてより簡潔にするためだけです。その事実を無視してください。
Client.java
// ServerResponse is a result from the server, in this case
// a list of users of the system (ignore that each time it's all bootstrapped).
public User[] callServerForInformationFromGUIWidget()
{
ClientBootstrap bootstrap = new ClientBootstrap(...);
bootstrap.setPipelineFactory(...);
ChannelFuture future = bootstrap.connect(new InetSocketAddress(host, port));
Channel channel = future.awaitUninterruptibly().getChannel();
// Where request is a POJO sent to the server,
// with a request such as get me a list of users
RequestPojo request = new RequestPojo(requestUserListCommand);
ChannelFuture lastWriteFuture = channel.write(request);
if(lastWriteFuture != null)
lastWriteFuture.awaitUninterruptibly();
}
今私は、サーバー上のデータを取得し、その結果を反撃する方法を理解します。唯一のことは、クライアント側でどのように処理するのですか?
ClientHandler.java問題は、クライアントコードが実際にその結果を取得しない方法です
@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e)
{
User[] users = (User[])e.getMessage();
}
:はいClientHandlerのクラスには、次のような何かを行うことができますか?すべての例はチャットサービスと似ています。チャットサービスでは、レスポンスを待機していないクライアント上でイベントが発生します。私が見つけたHTTPクライアントの例でさえ、これは欠けています。ドキュメント全体は本当に良いですが、コールバックを行う方法が欠けています。とにかく、この場合、サーバーからの応答を得るためにクライアントが必要であり、結果に基づいて必要な処理を行います。ハンドラが答えを探している、あるいは誰がいる人を知りませんので
IdealClient.java
// ServerResponse is a result from the server, in this case
// a list of users of the system.
public User[] callServerForInformationFromGUIWidget()
{
...
RequestPojo request = new RequestPojo(requestUserListCommand);
ChannelFuture lastWriteFuture = channel.write(request);
if(lastWriteFuture != null)
lastWriteFuture.awaitUninterruptibly();
User[] users = resultFromCallToServer();
performSomeAction(users);
}
:私はこのような何かを行うには、クライアントを書くのですか
つまり、質問をしました。そして、それがハンドラで行われている場合、どのように?
例についての私のコメントに戻って、httpクライアント(およびハンドラ)の例では、結果がSystem.outにダンプされます。 GUIを持っていたら、どのようにあなたの要求からの結果をGUIに渡すのですか?私はこれの例を見たことがありません。
リスナー登録のガイドラインに従っていますが、「互換性のない型があります:文字列をDataChangeEventに変換できません」...何が問題なのですか?どうも。 – Phobox