<div>vb.net을 활용하여 간단한 다중스레드 서버 프로그램을 구현해보았습니다.</div> <div> </div> <div>이론상 100개의 연결을 동시에 처리하는 프로그램인데, 총 3개의 쓰레드로 구성됩니다.</div> <div> </div> <div>메인 쓰레드 1번</div> <div>클라이언트 연결 대기 쓰레드 2번</div> <div>클라이언트 연결시 데이터를 send/receive하는 쓰레드 3번</div> <div> </div> <div> </div> <div>1번 쓰레드는 1번째(cnt as integer = 1) 클라이언트 연결을 기다리는 2번 쓰레드를 생성.</div> <div> </div> <div>2번 쓰레드는 AcceptTcpClient()로 계속 대기 하다가 클라이언트의 연결이 감지되면 3번 쓰레드를 생성 후</div> <div>자신은 cnt값을 +1하여 두 번째 클라이언트의 연결 대기를 하는 무한 loop 구조입니다.</div> <div> </div> <div>3번 쓰레드는 클라이언트(cnt) 객체 생성후 send, receive를 수행하고 클라이언트를 disconnect() 한 후 종료합니다.</div> <div> </div> <div> </div> <div>즉, 1개의 리스너 스레드가 동시에 1개의 연결만 받고 순차적으로 연결을 처리하나,</div> <div>연결이 완료된 후 데이터의 처리는 다중스레드로 동시에 처리하는 방식입니다.</div> <div> </div> <div> </div> <div>문제는,</div> <div>클라이언트 연결이 많지 않은 소규모의 서버에서는 잘 돌아가는 것 같은데,</div> <div>동시에 연결 횟수가 급증한다거나, 항상 연결시도가 많은 경우라면 문제가 많이 발생할 것 같습니다.</div> <div>예를들어 2번 스레드가 첫번째 클라이언트의 연결을 처리하고 두번째 클라이언트 연결을 기다리는 시간이 0.05초 인데,</div> <div> </div> <div>0.05초내에 연결 시도가 10건이 들어왔다면, 처리가 정상적으로 이루어지지 않을거 같은데요</div> <div>그렇다고 리스너 스레드를 동시에 10개 100개씩 돌려놓기엔 시스템적으로 무리가 따를때</div> <div>이런 경우 어떻게 설계하는지 정말 궁금합니다.</div> <div> </div> <div> </div> <div>서버 프로그램이 만드는 재미가 있으면서도 생각해야할게 정말 많네요.</div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.