2017-06-08 58 views
0

我有一個服務器和一個客戶端有自己的引導程序。我的問題是,不同的連接用於不同的目的。一個用於控制通道(與服務器通信並返回),然後建立其他連接以進行數據傳輸。我以編程方式將idlestate處理程序僅添加到需要它的連接管道,但在調試後我發現無論連接如何,通道始終是相同的。所以我的數據傳輸正在影響保持活力。我可以通過將調試添加到netty IdleStateHandler並輸出通道ID來看到這一點。很可能是我的誤解,但我認爲每個連接都是自己的渠道。Netty IdleStateAwareHandler每個連接不是通道

有關如何將空閒狀態處理程序添加到特定連接的任何想法?

回答

0

通道是對Netty連接的抽象。所以,每次初始化管道與它IdleStateHandler,像這樣:

public class MyChannelInitializer extends {ChannelInitializer, Channel} { 
    @Override 
    public void initChannel(Channel channel) { 
     channel.pipeline().addLast("idleStateHandler", new IdleStateHandler(60, 30, 0)); 
     channel.pipeline().addLast("myHandler", new MyHandler()); 
    } 
} 

分配新IdleStateHandler每個新的連接/通道。沒有代碼,很難給出更準確的答案。

最可能的是,你要麼使用信道或您的客戶端之間的IdleStateHandler相同的實例僅打開1連接,而不是2

0

發現該idlestatehandler的位置是我的問題。它是在導致無效狀態發生的sslhandler之後添加的。在ssl處理程序之前移動它,它適當地工作。