ݺߣ

ݺߣShare a Scribd company logo
사내 스터디


온라인 게임 서버의 이해



           드림익스큐션
            2010-4-5
             서버 중원
OSI Layer
Mac address 사용 레벨

                  CSMA/CD 방식

struct ethhdr {
 unsigned char      h_dest[6];   받는자의 MAC
 unsigned char      h_source[6]; 보내는자 (내꺼) MAC
 unsigned short     h_proto; 상위 프로토콜의 식별자(IV4, IP6, ARP, ICMP.. 등등)
}; => 14바이트
IP (Internet Protocol)
           IP, ARP,ICMP 등등
                             Connection-less Protocol
                             Addressing
                             Fragmentation/Reassemble
                             Time to Live

IP Fragmentation

데이터 그램의 크기 조절 기능
수신측에서 재조립(reassemble)
헤더에 같은 값의 Identification
MTU(Maximum Transfer Unit)의 길이에 따라 나누어 보냄.
IP (Internet Protocol)
TCP

프로세스간 통신
연결성립과 연결 종료
신뢰성 있는 Packet 전송
연속되는 Packet 전송                      ipconfig/
Data Overflow 방지를 위한 Flow Control   displaydn
Error Control...                    s
TCP 헤더
사내스터디 발표 온라인게임서버이해 20100401
UDP (User Datagram Protocol)

-   간단함
-   유연함
-   능률적
-   신속함
-   브로드 캐스트, 멀티 캐스트

- 신뢰성이 떨어짐.
- 다수의 datagram의 연속성이 없음.
- 메시지 크기의 제한 (65535)
Select 모델
    Process가 Kernel에게 명령하여 다수의 event중 하나를 기다리다 지정된 시간이
    지나거나 사건이 발생하면 process를 깨우도록 함.



While(1)
{
    Select(..등록된 소켓...);

     swtich(이벤트)
    {
      Case : Accept처리();
      Case : Recv처리();
      Case : disconnect처리();
      Case : 게임로직 처리();
    }
}


                           로직 쓰레드
       client                            DB 쓰레드     DB
                           Select(...)
Overlapped I/O

  애플리케이션은 입출력 함수를 호출한 후 입출력 작업의
  완료 여부와 무관하게 다른 작업을 진행
IOCP(I/O Completion Port)
 비동기 입출력 결과와 이 결과를 처리할 스레드에 대한 정보를 담고 있는 구조



1. IOCP 핸들 생성
   Iocp핸들 = CreateIoCompletionPort(...)
2. IO완료를 기다리는 복수의 워커 쓰레드 생성
while(1)
 {
   GetQueuedCompletionStatus(iocp핸들..)
   {
      Case : Recv처리();
      Case : disconnect처리();
      Case : 게임로직 처리();
   }
}
3. IOCP에 소켓 등록
   CreateIoCompletionPort(소켓...)




                                     PostQueuedCompletionStatus(...)
ٵ쓰레드
    워커 쓰레드


                                           로직쓰레드                  ٵ쓰레드             DB
    워커 쓰레드


                                                                  ٵ쓰레드
    워커 쓰레드



While(1)                                    While(1)
{                                           {
  GetQueuedCompletionStatus(iocp핸들..)         GetQueuedCompletionStatus(iocp핸들..)
  {                                           {
     Case : Recv처리();                            Case : 캐릭터 처리
         PostQueuedCompletionStatus(...)         Case : 룸 처리
     Case : disconnect처리();                      Case :
  }                                           }
}                                           }
끝

QA?

More Related Content

사내스터디 발표 온라인게임서버이해 20100401

  • 1. 사내 스터디 온라인 게임 서버의 이해 드림익스큐션 2010-4-5 서버 중원
  • 3. Mac address 사용 레벨 CSMA/CD 방식 struct ethhdr { unsigned char h_dest[6]; 받는자의 MAC unsigned char h_source[6]; 보내는자 (내꺼) MAC unsigned short h_proto; 상위 프로토콜의 식별자(IV4, IP6, ARP, ICMP.. 등등) }; => 14바이트
  • 4. IP (Internet Protocol) IP, ARP,ICMP 등등 Connection-less Protocol Addressing Fragmentation/Reassemble Time to Live IP Fragmentation 데이터 그램의 크기 조절 기능 수신측에서 재조립(reassemble) 헤더에 같은 값의 Identification MTU(Maximum Transfer Unit)의 길이에 따라 나누어 보냄.
  • 6. TCP 프로세스간 통신 연결성립과 연결 종료 신뢰성 있는 Packet 전송 연속되는 Packet 전송 ipconfig/ Data Overflow 방지를 위한 Flow Control displaydn Error Control... s
  • 9. UDP (User Datagram Protocol) - 간단함 - 유연함 - 능률적 - 신속함 - 브로드 캐스트, 멀티 캐스트 - 신뢰성이 떨어짐. - 다수의 datagram의 연속성이 없음. - 메시지 크기의 제한 (65535)
  • 10. Select 모델 Process가 Kernel에게 명령하여 다수의 event중 하나를 기다리다 지정된 시간이 지나거나 사건이 발생하면 process를 깨우도록 함. While(1) { Select(..등록된 소켓...); swtich(이벤트) { Case : Accept처리(); Case : Recv처리(); Case : disconnect처리(); Case : 게임로직 처리(); } } 로직 쓰레드 client DB 쓰레드 DB Select(...)
  • 11. Overlapped I/O 애플리케이션은 입출력 함수를 호출한 후 입출력 작업의 완료 여부와 무관하게 다른 작업을 진행
  • 12. IOCP(I/O Completion Port) 비동기 입출력 결과와 이 결과를 처리할 스레드에 대한 정보를 담고 있는 구조 1. IOCP 핸들 생성 Iocp핸들 = CreateIoCompletionPort(...) 2. IO완료를 기다리는 복수의 워커 쓰레드 생성 while(1) { GetQueuedCompletionStatus(iocp핸들..) { Case : Recv처리(); Case : disconnect처리(); Case : 게임로직 처리(); } } 3. IOCP에 소켓 등록 CreateIoCompletionPort(소켓...) PostQueuedCompletionStatus(...)
  • 13. ٵ쓰레드 워커 쓰레드 로직쓰레드 ٵ쓰레드 DB 워커 쓰레드 ٵ쓰레드 워커 쓰레드 While(1) While(1) { { GetQueuedCompletionStatus(iocp핸들..) GetQueuedCompletionStatus(iocp핸들..) { { Case : Recv처리(); Case : 캐릭터 처리 PostQueuedCompletionStatus(...) Case : 룸 처리 Case : disconnect처리(); Case : } } } }