簡體   English   中英

Netty的異步應用程序設計

[英]Asynchronous Application Design With Netty

我有一個服務器Foo,可以通過一個簡單的套接字連接到它。 我在套接字中寫入文本以發送消息,處理完后它會回復我的查詢,但是不能保證響應的順序。 我可以用ID鏈接請求和響應。

例如:

Send "1:request" to Foo
Foo Returns "1:response"

Send "1:request" & "2:request" to Foo
Foo Returns "2:response"
10 seconds later
Foo Returns "1:response"

題:

使用Netty處理這種情況的最佳方法是什么,如何提供允許我向Foo服務提交消息的界面,並給我一個Promise或Future來允許我返回而不會阻塞等待對消息的響應(但知道我有一個以后可以阻止的對象)

一種實現方法是在響應處理程序(即客戶端管道中的最后一個處理程序)與發出請求的客戶端之間共享數據結構。 例如,它可以是具有您的ID和阻止隊列的映射,處理程序將在其中放置響應。

您的客戶端中的發送消息類似於:

public Future send(String id, String msg) {
  BlockingQueue queue = new ArrayBlockingQueue(1);
  handler.responses().put(id, queue);
  channel.writeAndFlush(id + ":" + msg);
  return new MyFuture(queue);
}

然后,調用send()的線程可以等待myFuture.get()的響應,該線程的實現會阻塞在構造函數中傳遞的隊列,例如:

@Override
public String get() throws InterruptedException, ExecutionException {
  return queue.take();
}

簽出HTTP / 2示例以獲取另一種方法(仍然非常相似): https : //github.com/netty/netty/blob/4.1/example/src/main/java/io/netty/example/http2/client/HttpResponseHandler的.java

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM