C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
분야별 포럼
C++빌더
델파이
파이어몽키
C/C++
프리파스칼
파이어버드
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

자유게시판
세상 살아가는 이야기들을 나누는 사랑방입니다.
[22074] Re:Re:Re:동시접속 소켓수 최대가 몇개까지 가능할까요
Lyn [tohnokanna] 9765 읽음    2012-11-09 02:45
IOCP가 제일 유리하고...

시스템이 기본적으로 여는 포트가 꽤 많기때문에 실제 쓸수 잇는건 그 이하입니다.

그리고 IOCP는 Overlapped IO 의 결과를 받아오는 방식의 이름입니다...

그리고 소켓 방식 이전에 중요한건 얼마나 많은 처리를 하느냐입니다... 물론 쓰래드 많으면 CPU를 좀 많이 먹긴 하지만 요즘에 어지간한 상황에선 Context Switching 의 부하가 큰 비율을 차지하는 경우는 드뭅니다. 문제가 되면 IO 쪽이 대부분이지

카라얀 님이 쓰신 글 :
: 역시 빌더님께서 정확한 답변을 해주시는군요 ^^ 감사합니다. 몇가지 더 궁금한게 있는데 답변해주시면 고맙겠습니다.
: 빌더님 프로그램 보니까 동시접속 수가 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
: :
: :
: :
: :
: :
: :
: : ...
아제나 [azena]   2012-11-09 12:46 X
IOCP가 좋지만, 윈도우에서만 구현된다는 최악의 단점이 있죠.

서버 시장에 진출하려면 BSD 소켓만으로 구현하는게 좋습니다.

아직도 IBM AIX, SUN SPARK 머신이 돌아가는 기업이 많다는 충격적인 사실 -_-;;;;;;
Lyn [tohnokanna]   2012-11-09 13:59 X
어차피 저는 남한테 팔아먹을 서버 만드는게 아니라 직접 쓸걸 만드는거라 그런 머신들은 아웃 오브 안중 입니다.

크로스플랫폼따위도 관심없구요. 뭐 ACE나 Asio가 꽤 해결 해 주긴 하지만
Lyn [tohnokanna]   2012-11-09 14:38 X
아 저번회사에선 남한테 팔아먹을거 만들긴 했었네요... 이경우도 장비까지 같이팔아서 역시 다른OS를 신경쓸 이유는 없었습니다 ㅡ.,ㅡ;
오랑캐꽃 [oranke]   2012-11-09 15:42 X
아제나님//
IOCP는 소켓 처리에 많이 쓰이기는 하지만 소켓만 처리하기 위해 만들어진 물건은 아니에요.
비동기 IO 처리를 위해 제공되는 잘 만들어진 쓰레드풀 모델일 뿐이죠.
굳이 비유하자면 select 모델을 대체할 수 있는 방법들 중 하나??
winsock 역시 BSD소켓을 기반으로 하고 있고요...

다른 OS에 대응이 필요하다면 이폴같은 해당 OS의 비동기 API를 이용해야겠지요.
린님이 언급하신 플랫폼 중립 API들을 써먹어도 되고 말이죠~~ ^^;;

개인적으로... 멀티플랫폼을 고민한다면 그냥 C#으로 만드는게 장땡이라는 생각을 가지고 있습니다.
모노만 깔리면 OS 안가리고 굴러가니까요~~ ^^;;
Lyn [tohnokanna]   2012-11-10 00:08 X
전 그 경우는 Java를 쓰는데...

Mono Develop 보단 넷빈즈의 퀄리티가 좋아서 ..
개발자임 [abcde12345]   2012-11-10 14:19 X
Java의 경우 뭘 쓰시나요?? 저는 Netty가 좋아서 요놈을 쓰긴 하는데 메모리가 좀 많이 먹는듯 하긴 하네요..
Lyn [tohnokanna]   2012-11-10 22:10 X
Netty를 들여다 보긴 했는데...

구현이 난해하거나 특별히 강력한 기능을 제공하는것도 아니고 기본 인코딩이 빅엔디안이라 귀찮아서 따로 만들어서 씁니다.

+ -

관련 글 리스트
22071 동시접속 소켓수 최대가 몇개까지 가능할까요 카라얀 5671 2012/11/08
22072     Re:동시접속 소켓수 최대가 몇개까지 가능할까요 빌더(TWx) 28888 2012/11/09
22073         Re:Re:동시접속 소켓수 최대가 몇개까지 가능할까요 카라얀 7203 2012/11/09
22074             Re:Re:Re:동시접속 소켓수 최대가 몇개까지 가능할까요 Lyn 9765 2012/11/09
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.