Interruptible InputStream 자바

A장비에서 B장비에 socket으로 접속하여

연속된 데이터를 받아와서

A장비에 websocket으로 다중 접속하는 웹클라이언트에 전송해 주는

다중 Thread 프로그램을 만들었습니다.


websocket 접속시 Thread가 생성되어

B장비와 웹클라이언트를 중계하고

웹클라이언트가 접속종료시

Thread가 끝나는 것을 기대했습니다.


A장비와 웹클라이언트의 접속은 종료되지만

A장비와 B장비의 socket 접속은 inputstream.read를

사용하였기 때문에 데이터가 들어올 때 까지 기다리는 상태가 되어

Thread가 끝나지 않았습니다.


이를 해결하기 위해 다음과 같은 형식으로 코드를 변경했습니다.

InputStream is = sock.getInputStream();

InputStream is = Channels.newInputStream(Channels.newChannel(sock.getInputStream());


HashMap을 이용하여 websocket을 key로 Thread를 data로 저장한 후

websocket을 통해 종료요청이 들어올 경우 해당 Thread를 찾아 interrupt 시켰습니다.





Justin Yeom의 저작물인 이 저작물은 크리에이티브 커먼즈 저작자표시-동일조건변경허락 3.0 Unported 라이선스에 따라 이용할 수 있습니다.


TAG

Leave Comments


profile대한민국이 선의의 최적화를 이루기 바라며... 

Recent Trackback