2014-04-25 4 views
0

Apache Mina와 함께 Apache Camel을 사용하여 TCP 서버를 사용 중입니다. 내 코드에서 특정 프로토콜 디코더를 사용하고 있습니다. 이 디코더에서는 경로의 다운 스트림을 보내기 전에 X 바이트를 기다리고 있습니다.세션이 유휴 상태이고 Mina가있는 디코더에서 플러시되는지 확인하십시오.

세션이 유휴 상태이거나 닫혔다는 것을 이해할 수있는 뭔가를 구현하고 싶습니다. 그리고 우리가 이미 다운 스트림에 도착한 바이트를 전송합니다. (우리가 합계를 얻지 못 했어도 상관 없습니다 X 바이트). 이미 sessionIdle() 메서드를 재정의하는 IoFilterAdapter 구현을 시도했지만 사용 방법을 잘 모르겠습니다.

답변

1

대체적으로 sessionIdle() 메서드를 재정의하는 것은 기본적으로 세션 유휴 시간에 도달했을 때 세션을 닫거나 원하는대로 구성하는 것입니다.

sessionOpened() 메서드를 재정 의하여 처리기 클래스 내에 유휴 시간을 설정하거나 IoFilterAdapter을 연장하여 유휴 시간을 설정할 수 있습니다. 또한 IdleStatus 클래스에 정의 된 다른 유휴 상태를 사용할 수 있습니다

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

이 같은 뭔가 일을해야한다. 기본적으로 상태가 있습니다.

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");