2016-01-06 37 views
1

原諒我,如果我在Netty 101期間睡着了,但我想知道是否有一個「正確」的方式來等待多步連接過程來完成與Netty 。假設我有一個應用程序,其過程如下:等待與Netty完成多步連接過程

  1. 打開實際連接。
  2. 執行TLS握手。
  3. 做一些應用程序級別的握手以確認客戶端和服務器都在說FancyProtocol 2.8(或其他)。

當我打電話給Bootstrap#connect()時,我給了ChannelFuture。我的理解是,ChannelFuture將在第1步 - 即打開連接完成後立即生效,但我們仍然需要通過某種方式等待第2步和第3步。

我過去所做的是創建一個輔助「一切都已完成」Promise,並在步驟3完成後立即通知該承諾(或者如果在此期間有任何失敗)。這很好,但是當Netty可能已經有了一個處理這種情況的機制時,感覺這種做法很難。

因此,我想這是我的問題:還有更好的方法來等待多步驟連接過程來完成?

謝謝!

回答

0

應用程序級握手屬於應用程序級處理程序,在您的netty處理程序中,可以很容易地通過處理程序中的channelActive(ChannelHandlerContext)方法捕獲「connect」事件。

一個例子:

public class ApplicationLogicHandler extends ChannelInboundHandler { 
    @Override 
    public void channelActive(ChannelHandlerContext ctx) throws Exception { 
     super.channelActive(ctx); 
     ctx.writeAndFlush(new MyApplicationLogicPacket()); 
    } 
} 
+0

感謝您的答覆!我認爲我們的實際應用級握手能夠得到很好的控制。 我的問題更多的是讓管道外的調用者知道應用程序級的握手已經完成。也許有點太具體:有沒有一種很好的方式來推遲,例如,完成連接承諾,直到應用程序級握手完成爲止? –