세션은 Apache의 핵심입니다. 클라이언트 연결이 도착할 때마다 연결이 종료될 때까지 새 세션이 생성됩니다. 세션은 연결 및 다양한 정보를 저장하는 데 사용됩니다.
세션에는 다음과 같은 상태가 있습니다.
Connected : the session has been created and is available Idle : the session hasn't processed any request for at least a period of time (this period is configurable) Idle for read : no read has actually been made for a period of time Idle for write : no write has actually been made for a period of time Idle for both : no read nor write for a period of time Closing : the session is being closed (the remaining messages are being flushed, cleaning up is not terminated) Closed : The session is now closed, nothing else can be done to revive it.
다음 그림은 세션의 상태 전환 관계를 보여줍니다.
다음 매개변수는 다음과 같습니다. 세션 구성
수신 버퍼 크기
전송 버퍼 크기
유휴 시간
Write timeOut
사용자 정의 속성 관리:
예: 세션이 설정된 이후 사용자가 보낸 요청 수를 추적하려는 경우 이 맵에 쉽게 저장할 수 있습니다. 키를 생성하고 값과 연결하기만 하면 됩니다.
... int counterValue = session.getAttribute( "counter" ); session.setAttribute( "counter", counterValue + 1 ); ...
키/값 쌍을 사용하여 세션에 속성을 저장합니다. 이 키/값 쌍은 세션 컨테이너를 통해 읽거나 추가하거나 삭제할 수 있습니다.
컨테이너 정의
앞서 말했듯이 이 컨테이너는 기본적으로 매핑을 사용하는 키/값 컨테이너입니다. 물론 다른 데이터 구조로 정의할 수도 있습니다. 세션이 생성되면 인터페이스와 팩토리를 구현하여 컨테이너를 생성할 수 있습니다. 다음 코드 조각은 세션 초기화 중에 컨테이너를 생성하는 방법을 보여줍니다(이해가 안 되네요. 이게 무슨 뜻인가요?)
protected final void initSession(IoSession session, IoFuture future, IoSessionInitializer sessionInitializer) { ... try { ((AbstractIoSession) session).setAttributeMap(session.getService() .getSessionDataStructureFactory().getAttributeMap(session)); } catch (IoSessionInitializationException e) { throw e; } catch (Exception e) { throw new IoSessionInitializationException( "Failed to initialize an attributeMap.", e); }
여기에는 다른 종류의 컨테이너를 정의하려는 경우 구현할 수 있는 팩토리 인터페이스가 있습니다. 컨테이너:
public interface IoSessionDataStructureFactory { /** * Returns an {@link IoSessionAttributeMap} which is going to be associated * with the specified <tt>session</tt>. Please note that the returned * implementation must be thread-safe. */ IoSessionAttributeMap getAttributeMap(IoSession session) throws Exception; }
필터 체인
각 세션은 들어오는 요청이나 나가는 데이터를 처리하기 위해 일부 필터 체인과 연결됩니다. 각 세션에는 별도의 필터 체인이 지정되며 대부분의 경우 세션 전체에서 동일한 필터 체인을 많이 사용합니다.
통계
Each session also keep a track of records about what has been done for the session : number of bytes received/sent number of messages received/sent Idle status throughput and many other useful informations. Handler
마지막으로 프로그램 메시지를 처리하려면 핸들러를 세션에 연결해야 합니다. 이 Handler는 이에 대한 응답으로 패키지도 보낼 것입니다. 간단히 write 메소드를 호출하면 됩니다:
... session.write( <your message> ); ...
위는 Apache Mina 연구 노트 (4)-세션의 내용입니다. PHP 중국어 홈페이지(www.php.cn)!