Q&A

  • 대용량 통신?
안녕하세요~

오늘 아시는분에게 질문을 받았는데요 생판 처음들어 보는거라

대량의 패킷 전송이 필요한 서버인 경우 xxxx 기술을 쓴다고 하더군요

보통 서버쪽에서는 while문을 돌면서 recv해서 처리하고 했었는데요

이렇게 안하고 어떤 기술을 쓰게 되면... 아무리 많은 패킷이라고 해도

부하 없이 척척 해결된다고 하더군요...

처음 듣는거라 정확한 명칭도 기억이 잘 안나네요

멀티캐스팅, 브로드캐스팅 이런쪽은 아닙니다..

너무 막연하지만 혹시나 해서 올립니다..

그리고 TCP/IP입니다...

그럼 즐거운 하루 되시구~ 즐프하세요~
2  COMMENTS
  • Profile
    ㉯㉰감자 2003.06.06 01:36
    http://www.redwiki.net/wiki/moin.cgi/Design_20Issue_20When_20Using_20IOCP_20in_20a_20Winsock_20Server?action=highlight&value=iocp

    http://www.redwiki.net/wiki/moin.cgi/CompletionPort_20_c0_cc_be_df_b1_e2?action=highlight&value=iocp

    그런데 분위기가 M$ 냄새가 너무 나는데요...

    제가 이쪽으로는 잘 몰라서 그러는데 혹시 델파이나 자바로도 이런기술들을 사용할 수 있는것인지? M$의 VC++만을 위한것인지?

    아직 저 위 2페이지도 자세히 읽어보지 않아서..쩝..

    오래간 만에... 자료 찾기에 들어가봐야 겠네요~~

    그럼 즐프하세요
  • Profile
    방재웅 2003.06.06 03:25

    안녕하세요.
    저역시 자세히는 모르지만 아는데까지 설명드리겠습니다.

    IOCP는 서버 side에서 주로 사용하는 소켓프로그래밍의 종류입니다.

    쉽게말해서 리니지나 포트리스 같은 대형 온라인게임의
    서버쪽 프로그래밍을 할 때 쓰는 소켓프로그래밍 방식이죠.

    IOCP를 알아보기 전에 우선 알아봐야 할 것 들을 말씀드리자면,

    소켓이란 네트워크프로그래밍을 위한 API로서
    원래 Unix에서 버클리소켓이란 이름으로 먼저 개발되었고
    MS에서 윈도우즈에 포팅한 것이 WinSock입니다.

    Windows기반에서 사용하는 네트워크프로그래밍은 대부분
    WinSock API를 기반으로합니다.

    자세히는 모르겠지만 Indy컴포넌트도 내부적으로는 Winsock API를
    사용할 것으로 예상됩니다.

    WinSock은 WIN32 API로 제공되기 때문에 델파이, VB, VC++, CBuilder 등
    Win32 API를 사용가능한 거의 대부분의 개발툴에서 사용이 가능합니다.

    (참고로 VC++에서 프로그래밍할 때는 WinSock2.h 헤더와 WS2_32.lib 파일을
    컴파일시 삽입합니다. 델파이에서는 잘 안써봐서... -.-; )

    그리고 소켓의 종류에는 동기소켓(Block)과 비동기소켓(Non Block)이 있습니다. 동기소켓이란 해당 소켓함수의 처리가 완료될 때까지 마냥 기다리는 방식이고 비동기는 함수처리를 백그라운드로 하고 바로 리턴하는 방식이죠.

    윈도우 프로그래밍에서는 순수 동기소켓만 사용할 일은 거의 없습니다.
    많일 메인폼에서 recv()나 send() 등의 함수를 호출했을 때
    프로그램이 멈춰버리기 때문이죠. 그래서 동기소켓으로 프로그래밍할 때는
    쓰레드 등을 사용하여 처리하곤 합니다.

    소켓프로그래밍방식에는 select, event, overlapped, IOCP 등
    많은 방식이 있는데 서버계열에 가장 최상의 성능을 낸다는? 방식이
    바로 IOCP입니다. 찾아 보시면 아시겠지만 쓰레드를 몇개 생성하여
    처리하는 방식으로 윈도우서버의 자원을 최소화하여 최상의 서비스가 가능하다고 하네요.

    참고로 프리배틀넷 서버는 select 방식을 사용하고 있습니다.
    • 박정순
    • 2003.06.06 00:39
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 임진묵
      2003.06.06 01:39
      TCP 던지 파워소켓이 있잖아요.. 거기에 아이피하고 포트 하고 넣고 연결 누르시면... 연결이 정상적으로...
    • bluechip
      2003.06.06 02:27
      현재는 님과 같은 방법으로 사용중입니다 결과를 실시간으로 나타내야 하기 때문에 매번 연결/연결해제 ...
    • 장의성
    • 2003.06.06 00:04
    • 1 COMMENTS
    • /
    • 0 LIKES
    • ㉯㉰감자
      2003.06.06 00:21
      IdException은 Indy콤포넌트에서 사용하는 에러죠.. IdException에다 커서 두고 F1만 눌러보셨어도.. 금...
    • ㉯㉰감자
      2003.06.06 01:36
      http://www.redwiki.net/wiki/moin.cgi/Design_20Issue_20When_20Using_20IOCP_20in_20a_20Winsock_20Serve...
    • 방재웅
      2003.06.06 03:25
      안녕하세요. 저역시 자세히는 모르지만 아는데까지 설명드리겠습니다. IOCP는 서버 side에서 주로 사...
    • 이승근
    • 2003.06.05 22:47
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 김경록
      2003.06.06 18:42
    • 이성찬
      2003.06.12 05:40
      간단히 레파지토리 활용하세요. 폼 상속이 쉽고 간편해집니다. 생성한 폼에 코딩중 중복된 부분을 해준...
    • 이승근
      2003.06.06 19:36
      상속을 받는다는게 무슨뜻이며 어떻게 받아야 하는거져... 초봅니다... 고수님 부탁드려여...^^
    • 김경록
      2003.06.07 05:59
      예를 들어서.. MainForm1 이라는 어떤 기능을 가진 Form을 만들었다고 가정합시다.. 이 폼의 선언부에...
    • 권광화
    • 2003.06.05 22:42
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 오선배
      2003.06.05 23:03
      function Lj(s: string; len: integer): string; { ex)Lj(4,'AB')-> 'AB  ' } var  &n...
    • 이광수
      2003.07.23 22:00
      http://suppul.x-y.net/bbs/board.php3?table=delphi&query=view&l=37&p=1&go=0 입니다.
    • 이정은
    • 2003.06.05 21:25
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 홍미자
      2003.06.23 23:38
      ______________ 1.변수 선언    var   Cnt : Integer; 2.레포트의 BeforePrint 이...
    • 신명곤
      2003.06.06 04:34
      sql에 between 문을 쓰면 되지않을까 생각하는 데요
    • 김명찬
      2003.06.05 21:35
      쿼리할때부터 필요한 날짜까지만 쿼리를 하거나.. subdetail 밴드를 사용하여 OnNeedData 이벤트를 사요...
    • 김명찬
    • 2003.06.05 21:02
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 방재웅
      2003.06.06 03:29
      다른 항목은 모르겠지만 요 레지스트리를 사용하시면 기본글꼴은 고정이 가능합니다. 참고로, 폼의 ...
    • KDDG_ZZOM
      2003.06.05 21:14
      우선 Open을 ExecSQL로 바꿔서 해보세요... Open은 조회할때만 사용하시고요... 즐프하세요...
    • 정문희
      2003.06.06 00:20
    • 초보
    • 2003.06.05 19:34
    • 2 COMMENTS
    • /
    • 0 LIKES
    • KDDG_ZZOM
      2003.06.05 19:48
      필드의 널값을 비교할려면 IS NULL,  IS NOT NULL이런식으로 해야되는 예약어라고 생각하시는게...
    • 이광수
      2003.06.05 19:48
      데이터 베이스에 따라 다르겠지만 오라클의 경우는 = null을 쓰시면 결과를 얻을수 없습니다. null 의 ...
    • 아폴론
    • 2003.06.05 19:23
    • 2 COMMENTS
    • /
    • 0 LIKES
    • KDDG_09
      2003.06.05 19:54
      clBtnFace 과 clSilver 는 틀린색깔이죠.... clBtnFace는 시스템 색이죠.... 바탕화면 등록정보에서 화면...
    • ㉯㉰감자
      2003.06.05 19:48
      clBtnFace같은 경우는 OS의 테스크탑에서 설정값 색상값을 가지거든요 아마 98이나 xp에서 clGray하면 ...
    • 임형호
    • 2003.06.05 19:02
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 타락천사
      2003.06.09 02:57
      안녕하세여. 타락임다.. 별로 권하고 싶지 않습니다. 공유 폴더 만들면 바이러스를 걸리게 할 뿐입니...
    • goodlsw
    • 2003.06.05 09:46
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 한원희
      2003.06.07 12:50
      안녕하세요. 한원희입니다. 아마도 다음과 같이 코딩하신거 같은데...   Form1.ShowModal;...
    • yosule
      2003.06.05 08:02
      메인폼을 MDI 폼 스타일로 바꾸세요
    • 맑고투명
      2003.06.06 06:44
    • yosule
      2003.06.06 08:24
      씁쓸...
    • 마르
    • 2003.06.05 05:08
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 박상기
      2003.06.05 07:48
      Delphi Symbol Module의 약자로서 이것이 안 생기게 할려면 델파이 메뉴에서 Tools -> Environmen...
    • 김철홍
      2003.06.18 03:29
      Record를 이용해 보심이.. ex) Type       pdata = ^TData;  &n...
    • 박정일
      2003.06.11 03:59
      DLL에서 스트링을 넘길때는  PChar로 넘겨야 안전합니다. 그리고, unit 소스에 ShareMem이 첫번...
    • 방재웅
      2003.06.06 03:36
      만일 APP가 델파이라면 TStringList 를 사용해보세요. 아니면 포인터를 사용하시는 것도 괜찮구요.
    • yosule
      2003.06.05 08:44
      클래스를 이용한 개체(Object)를 리턴하는 방법으로 해보시죠!
    • 오병주
      2003.06.05 03:00
      Try ~ except 문에  EIdSocketError 사용하세요... Try Except   on EIdSocke...