2014-04-25 49 views
0

我正在使用Apache Camel和Apache Mina一起構建TCP服務器。我在我的代碼中使用特定的協議解碼器。在這個解碼器中,我在將它們發送到路由下游之前等待獲得X個字節。確定會話是否空閒並在解碼器中使用Mina刷新?

我想實現一些能夠理解會話空閒或關閉的事情,然後將已經下載的字節發送到路由中(如果我們沒有獲得總數,這並不重要X字節)。我已經嘗試實施IoFilterAdapter覆蓋方法sessionIdle(),但我不知道如何使用它。

回答

1

覆蓋sessionIdle()方法基本上是在會話空閒時間到達時關閉(或按需要進行配置)會話。

您可以通過重寫sessionOpened()方法來設置處理程序類中的空閒時間(或者通過擴展IoFilterAdapter)。 這樣的事情應該做的工作:

@Override 
public void sessionOpened(final IoSession session) throws Exception 
{ 
    session.getConfig().setIdleTime(IdleStatus.BOTH_IDLE, this.idleTimeOut); 
} 

您也可以使用它在IdleStatus類中定義的其他空閒狀態。基本上存在這樣的狀態:

public static final IdleStatus READER_IDLE = new IdleStatus("reader idle"); 
public static final IdleStatus WRITER_IDLE = new IdleStatus("writer idle"); 
public static final IdleStatus BOTH_IDLE = new IdleStatus("both idle");