클라이언트 접속 처리 질문..
글쓴이: hcjung / 작성시간: 목, 2006/04/20 - 1:14오후
서버에서 여러개의 클라이언트 접속을 받아 클라이언트에서 요구하는 데이타를
전송해주는 서버를 만들고자 합니다.
서버 소켓을 생성하고 클라이언트 접속을 감시하는 쓰레드를 생성했습니다.
클라이언트 접속시 각 클라이언트로부터 데이타가 들어오는지 감시하는
쓰레드를 만들고요... 이렇게 하니 3개의 클라이언트만 접속해도 쓰레드가
4개가 생성된 셈입니다. 문제는 프로그램이 많이 느려지네요.
제가 하는 방식에 문제가 있는건지요? 쓰레드를 사용하지 않고 데이타가 들어오는지
감시 할 수 있습니까? 고수님들 조언 부탁드립니다.
Forums:
보통..
부모 프로세스가 클라이언트가 접속시 쓰레드를 만들어서 할당해줍니다.
부모는 접속하면 단지 연결만 해주는 역할이죠.
그런데 위에서 하는 방식으로 부모가 하지 않고 쓰레들 하나 만들어서 데이터가 들어오는지 체크를 하고 쓰레드를 생성하는것이라면... 메모리가 모자를수도 잇습니다.
예를 들면 이런거죠.
1개의 클라이언트가 접속을 햇습니다. 그래서 서버에서 쓰레드를 만들어서 연결을 햇습니다. 그런데 이 클라이언트가 데이터를 보내는군요. 그럼 클라이언트로부터 데이터가 들어오는지 감시하는 쓰레드는 다시 쓰레드를 만들겟군요.
즉 클라이언트가 데이터를 보낼때마다 쓰레드를 만든다면 1개의 클라이언트가 접속을 하더라도 쓰레드가 계속 생겨나는것이죠.
서버를 만드는 많은
서버를 만드는 많은 방법중에,....
전형적인 멀티쓰레드 서버를 만들고 있는 셈입니다.
지금 현재방식대로 하시되, 총 쓰레드의 개수를 지정하고(접속가능한 수) 특정 개수가 넘으면 더이상 accept()하지 않거나, accept()후 클라이언트에게 힘들어서 못하겠다등의 메시지 보내고 끊어버리게 하는등의 테크닉을 구사할 수 있습니다.
서버의 기능 환경등에 따라서, 성능 문제를 고려할 수 있습니다. 하드웨어를 업그레이드 하거나, 아니면 프로그래밍 모델을 바꿔야 겠지요. 풀고자 하는 문제에 따라서, 그 선택은 많이 바뀌므로, 섣부른 답변을 드리기는 어렵습니다.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
웬만해선 쓰래드
웬만해선 쓰래드 몇개 불렸다고 느려지거나 하지 않는데...
먼가 다른문제가 있을듯..
그리고 보통은 쓰레드생성해서 감시하거나 하지 않고 그냥 감시하는데.
----------------------------------------------------------------------------
접속 pool을 도입하세요
클라이언트의 요청에 대한 응답의 부하에 따라 적절한 응답 처리 스레드 갯수를
한정하고 접속을 관리하는 스레드는 접속만 하고 그 연결은 계속 유지
시킵니다. 연결 관리는 링크드 리스트나 포인터 배열을 사용하거나 해도
되구요.
응답처리 스레드는 항상 풀을 주기적으로 접속 풀을 감시하면서 해당 연결을
얻어와서 응답을 처리하면 됩니다.
댓글 달기