역시 빌더님께서 정확한 답변을 해주시는군요 ^^ 감사합니다. 몇가지 더 궁금한게 있는데 답변해주시면 고맙겠습니다.
빌더님 프로그램 보니까 동시접속 수가 6만 4천4백 71개로 표시되었던데 65535 거의 근접하지만 끝까지 가지 못하는 이유가 있나요?
또, 소켓 API도 비동기 방식도 있고, 오버랩드I/O도 있는데, 동시접속 수가 몇만명 이상 되려면 반드시 IOCP를 써야 하는건지요.
빌더(TWx) 님이 쓰신 글 :
: 카라얀 님이 쓰신 글 :
: : 인디로는 4천도 힘들다는 말도 있고, IOCP 이용하면 1만명 까지 된다는 말도 있고,
: : 지금은 CPU가 멀티코어에 하이퍼스레드 지원되서 10배 더 많은 4만명? 정도? 돌릴수 있다는 말도 있고,
: : 실제 동시접속 소켓수는 최대 몇개까지 가능할까요
:
:
:
:
: 답변:
:
: 대충 Indy 에 대한 답변 글들을 훑어 보니까...
:
: Indy 에서 TIdThread 수정하면 몇만 명도 가능...
:
: 64bit 델파이 이용해서 Indy 쓰면... 멀티코어 하이퍼스레드 지원되서 10배 더 많은 4만 명도 가능하다는... 여러 얘기들이 있던데
:
: 몇만 명 이상의.. 동시접속을 고려한 Client/Server 프로그램을 실제로 구현해 본... 경험 없이 추측으로만 하는 얘기들로 보이네요...
:
:
: Indy Framework 구조는 Scalable Network 환경에 적합한 구조가 결코 아닙니다.
:
: Indy Framework 소스코드를 살펴 보면 대번에 알수 있겠지만...
:
: 인디는 애초 부터... 쉽게 구현하자는 게 설계 목표였고...
:
: 네트웍 라이브러리를 쉽게 구현하기 위해서 소켓 모델 또한 Blocking-Socket 구조로 설계되어 있습니다.
:
: 프레임웍이 Blocking-Socket Model 이다보니... 클라이언트 하나당 쓰레드를 생성하는 식으로 구조가 잡혀있고...
:
: 하나의 쓰레드가 생성되기 위해선 User-mode 에서 뿐만 아니라... 커널 모드에서도 스케쥴러가 쓰레드에 대한...
:
: 자료구조를 생성해서 관리해야 하기 때문에... 메모리 낭비도 크고...
:
: Indy 처럼... 쓰레드 기반으로 돌아가는 프레임웍의 경우... 몇천개 혹은 몇만 개의 쓰레드를 Context Switching
:
: 하는 것.. 자체가 매우 비효율적인 구조가 돼 버립니다... ("김모씨(testcode)"님이 뭐 정확한 답변을 적어 주셨네요...)
:
:
: 동시에 접속 가능한 최대 소켓수를 물으셨는데...
:
: 기본적으로 Windows 7이나 8의 경우... 32비트로 프로그램을 만들더라도...
:
: 6만 4천에서 6만 5천개 까지는 동시 소켓접속이 가능 합니다...
:
: Windows Server 버전의 경우... TCP 최대 Connection 수는 디폴트 Configuration 상태에서 0x00fffffe (Default = 16,777,214)
:
: 입니다... 어마어마한 숫자죠...
:
: 그러나 저렇게 최대 Socket Connection 수가 클지라도... 65,535개의 한계를 벗어나지 못하게 되는데요...
:
: 이유는... TCP/IP Protocol Stack 에서 (TCP Header 구조) Port 필드가 16비트 크기를 갖기 때문 입니다...
:
: 결국 TCP/IP Header 구조 때문에... 하나의 아이피에 사용되어질 수 있는 최대 포트수가 65,535개로 제한 되는데...
:
: 이 보다 더 많은 동시 접속 소켓을 사용하도록 하기 위해서는... Network Interface Card 를 추가로 설치해서...
:
: 서버를 구성해야 합니다... Scalable Network 서버로 사용되는 시스템에... NIC 카드가 몇개씩 달려 있는 것도 이 때문 이죠...
:
: 이런 식으로 포트를 확장을 할수 있기 때문에... 사실상 10만명 이상의 동시 접속도 가능하게 됩니다...
:
: 프로그램에선 Multiple NIC Interface를 바인딩 처리해주면 되는 거고요...
:
:
: 아래는 32비트로 서버 프로그램을 구현해서... Windows 8 에서 테스트한 것을... 캡쳐한 화면 임...
:
:
:
:
: 혹시 몇만 명 이상의... Scalable Network Client/Server 프로젝트 개발 건이 있습니까? 있으면 연락 주세요...
:
: 10만 명 이상 동시접속 구현도 가능하니까요 (Socket API를 직접 이용해서 구현 합니다) ... :p
:
:
:
:
:
:
: ...