'SSL'에 해당되는 글 1건

  1. 2008.07.22 JAVA NIO SSL by 파이팅야 3

JAVA NIO SSL

풀그림 2008. 7. 22. 15:58

ㅇ. SSLEngine 이해
- [한글 Java API Document]를 보면 어떻게 쓸지 이해된다.
  http://xrath.com/javase/ko/6/docs/ko/api/javax/net/ssl/SSLEngine.html
- onjava 관련글
  http://www.onjava.com/pub/a/onjava/2004/11/03/ssl-nio.html
- NIO 관련글
  http://www.javacafe.or.kr/lecture/cafeLecture/network/nio/microsoft1_SJH.html
ㅇ. UML
- class/sequence diagram

사용자 삽입 이미지
사용자 삽입 이미지


ㅇ. 변경된 점
#. SocketChannel을 Selector에 등록하는 부분의 위치 변경
-- 기존 --> ChannelHandler의 생성자에서 등록함
-- 변경 --> PlainChannel이나 SSLChannel의 생성자에서 등록함

#. ChannelHandler부분의 변경, Server에서 Acceptor하는 부분은 기존과 같습니다. 하지만, socketConnected()안에서
-- 기존 --> new ChannelHandler()하고 Reactor(SelectorThread)에서 handleRead()나 handleWrite() 이벤트를 받아서 Server에게 알려줌
-- 변경 --> new PacketChannel()하고 PlainChannel이나 SSLChannel을 가지고 있고, Reactor에서 handlRead()나 handlwWrite()를 받으면
PlainChannel이나 SSLChannel이 이벤트를 받고 처리작업을 한 후 PacketChannel의 handlerRead나 handleWrite 이벤트를 발생시켜서 Sever에서 알려줍니다.

#. Reactor에서 read이벤트 발생시
-- 기존 --> Reactor -> ChannelHandler.handleRead() -> Server.packetArrived()
-- 변경(Plain) --> Reactor -> PlainChannel.handleRead() -> PacketChannel.handleRead() -> Server.packetArrived()
-- 변경(SSL) --> Reactor -> SSLChannel.handleRead() -> SSLChannelManager.registerForRead() -> SSLChannel.fireReadEvent() ->
PacketChannel.handleRead()호출 후 Server.packetArrived()호출함

SSlChannel.handleRead()안에서 unwrap()한 후 바로 PacketChannel.handleRead()를 호출해도 되지만, 위와 같이 SSLChannelManager에 자신(this or SSLChannel)를 등록시킨 후 자신의 fireReadEvent()를 호출한다.
SSLChannelManager의 역할은 Reactor의 역할과 비슷하게 이벤트를 발생시키는 역할을 한다. 따라서 SSLChannel의 Channel로서의 역할에 이벤트 발생시키는 역할을 포함해서 클래스 하나에 여러가지의 역할(기능)을 넣는것이 좋지 않아서 뺀것 같다.
이벤트가 발생되는 곳은 이제 Reactor와 SSLChannelManager 2곳이 된다.


invalid-file

sample source

invalid-file

staruml file

Posted by 파이팅야
,