반응형
네트워크 프로그래밍(TCP 소켓) 스레드 병렬 처리
연결시, ServerSocket의 accept()를 실행하거나, 서버 연결 요청을 위해 Socket 생성자 또는 connect()를 실행할 경우 해당 작업이 완료되기 전까지 블로킹(blocking)된다.
데이터 통신시에도 InputStream, OutputStream의 read(), write() 메소드는 작업이 끝날 때 까지 블로킹된다.
=> 결론적으로 ServerScoket과 Socket은 동기(블로킹) 방식으로 구동된다.
이렇게 동작할때의 문제점은, 서버 애플리케이션은 지속적으로 클라이언트의 연결 수락 기능을 해야하는데, 입출력에서 블로킹되면 이 작업을 할 수 없게된다. 또한 클라이언트1과 입출력하는 동안 클라이언트2와 입출력을 할 수 없게된다. 그렇기 때문에 우리는 작업스레드를 생성해서 병렬적으로 처리해야 한다.
=> 과도한 스레드 생성을 방지하기위해 스레드 풀을 사용한다.
작업 흐름
- 클라이언트가 연결 요청
- 서버의 스레드 풀에서 연결 수락을 하고 Socket을 생성
- 클라이언트가 작업 처리 요청
- 서버 스레드풀에서 요청을 처리
- 응답을 클라이언트로 반환
채팅 서버 및 클라이언트를 구현해보자
링크 : client 소스
링크 : server 소스
링크 : project github 주소
출처 : 이것이 자바다.
반응형
'그 외 ... (정리해야함) > 프로젝트' 카테고리의 다른 글
[Rest API] 프로젝트 설정_1(JavaConfig, DB) (0) | 2019.04.18 |
---|---|
[Rest API] 프로젝트 준비(web.xml, pom.xml 설정) (0) | 2019.04.18 |
[프로젝트] 도서 정보를 처리하는 REST API를 만들어보자 (0) | 2019.03.30 |
[프로젝트] 스프링(Spring) 파일업로드1 (0) | 2018.08.01 |