티스토리 뷰

현재 netty3.8.0_final을 사용 중에 있는데,


netty에서 Bootstrap 생성, 설정 한 후, connect() 를 하고 동기식으로 다음 로직을 실행할 때

원래는 외부에 connect()의 결과를 리턴 해 주기 위해 아래처럼 await 관련 메소드를 썼었는데, 이럴 경우, 하나의 프로그램에서 여러 netty클라이언트를 사용해서 처리할 경우, dead lock이 걸릴 수도 있다는 예외(?)를 netty가 친절(?)하게 알려 준다. ㅜㅜ;


예외 메세지는 요렇다.

java.lang.IllegalStateException: await*() in I/O thread causes a dead lock or sudden performance drop. Use addListener() instead or call await*() from a different thread.

어쩌구저쩌구...


반드시 동기식으로 진행되어야 하는 상황이 아니라면 아래처럼 리스너를 등록해서 netty가 던져주는 이벤트를 받아서 처리해 주도록 한다.


좀더 해 보니, connect() 뿐만 아니라 close() 와 bootstrap.releaseExternalResources() 도 임의로 호출하면 안되고 리스너를 통해서 호출이 되도록 해야 예외발생이 안 된다.~!!!

그리하야~ close() 와 관련된 리스너는 아래와 같이 했다.


정말 멀고도 험한 네트워킹의 길.. 정말 강호의 고수님들에게 경의를 표한다. :)

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함