[Book] κ²Œμž„ μ„œλ²„ ν”„λ‘œκ·Έλž˜λ° κ΅κ³Όμ„œ - 4μž₯ κ²Œμž„ μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈ
Β·
πŸ“ Book/✏ Game Server
4μž₯ κ²Œμž„ μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈ κ²Œμž„ μ„œλ²„κ°€ ν•˜λŠ” 역할을 μ΄ν•΄ν•˜λ €λ©΄ κ²Œμž„ μ„œλ²„κ°€ μ–΄λ–»κ²Œ λ°œμ „ν•΄ μ™”λŠ”μ§€ μ•Œμ•„λ³΄λ©΄ λœλ‹€. 1. νŒ¨ν‚€μ§€ κ²Œμž„μ—μ„œ κ²Œμž„ μ„œλ²„ 1995λ…„ λ‹Ήμ‹œ λŒ€λΆ€λΆ„μ˜ κ²Œμž„μ€ 인터넷이 μ•„λ‹Œ κ°€κ²Œμ—μ„œ ꡬ맀해야 ν•˜λŠ” νŒ¨ν‚€μ§€ κ²Œμž„μ΄μ—ˆλ‹€. νŒ¨ν‚€μ§€ κ²Œμž„μ€ μ»΄ν“¨ν„°μ˜ λ””μŠ€ν¬ λ“œλΌμ΄λΈŒλ‚˜ CD-ROM λ“œλΌμ΄λΈŒμ— 넣은 ν›„ λ°”λ‘œ μ‹€ν–‰ν•˜κ±°λ‚˜ ν•˜λ“œ λ””μŠ€ν¬μ— μ„€μΉ˜ ν›„ μ‹€ν–‰ν•˜λŠ” 방식이닀. μ΄λ•Œμ˜ νŒ¨ν‚€μ§€ κ²Œμž„μ€ 컴퓨터 λ„€νŠΈμ›Œν¬λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šμ•˜λ‹€. κ·ΈλŸ¬λ‚˜ 인터넷이 λ³΄κΈ‰λ˜κΈ° μ‹œμž‘ν•˜λ©΄μ„œ ν”Œλ ˆμ΄μ–΄κ°€ μ„Έ λͺ… 이상 인터넷을 톡해 ν”Œλ ˆμ΄ν•˜λŠ” λ°©μ‹μ˜ νŒ¨ν‚€μ§€ κ²Œμž„μ΄ λ“±μž₯ν•˜κΈ° μ‹œμž‘ν–ˆλ‹€. κ²Œμž„μ„ ν•˜λ €λ©΄ ν”Œλ ˆμ΄μ–΄λ“€μ˜ κ²Œμž„ ν”Œλ ˆμ΄ μƒνƒœ(μ„Έμ…˜)λ₯Ό μ €μž₯ν•΄μ•Ό ν–ˆκ³  이λ₯Ό μœ„ν•΄ ν”Œλ ˆμ΄μ–΄ 쀑 ν•œ λͺ…μ˜ 컴퓨터가 μ„œλ²„κ°€ λ˜μ–΄ λͺ¨λ“  ν”Œλ ˆμ΄μ–΄μ˜ κ²Œμž„ ν”Œλ ˆμ΄ μƒνƒœλ₯Ό μ·¨ν•©..
[Book] κ²Œμž„ μ„œλ²„ ν”„λ‘œκ·Έλž˜λ° κ΅κ³Όμ„œ - 3μž₯ μ†ŒμΌ“ ν”„λ‘œκ·Έλž˜λ° (2)
Β·
πŸ“ Book/✏ Game Server
3μž₯ μ†ŒμΌ“ ν”„λ‘œκ·Έλž˜λ° 6. 논블둝 μ†ŒμΌ“ μΌλŒ€μΌ λ„€νŠΈμ›Œν‚Ή ν”„λ‘œκ·Έλž¨μ„ κ°œλ°œν•  λ•ŒλŠ” λΈ”λ‘œν‚Ή μ†ŒμΌ“μ„ μ‚¬μš©ν•΄λ„ λ¬΄λ°©ν•˜λ‹€. ν•˜μ§€λ§Œ λ„€νŠΈμ›Œν‚Ήμ„ ν•΄μ•Ό ν•˜λŠ” λŒ€μƒμ΄ μ—¬λŸΏμ΄λΌλ©΄ μ–΄λ–»κ²Œ ν•΄μ•Ό ν• κΉŒ? λ‹€ν–‰νžˆ λŒ€λΆ€λΆ„ μš΄μ˜μ²΄μ œμ—μ„œλŠ” μ†ŒμΌ“ ν•¨μˆ˜κ°€ λΈ”λ‘œν‚Ήλ˜μ§€ μ•Šκ²Œ ν•˜λŠ” APIλ₯Ό μΆ”κ°€λ‘œ μ œκ³΅ν•œλ‹€. 이λ₯Ό 논블둝 μ†ŒμΌ“μ΄λΌ ν•œλ‹€. 논블둝 μ†ŒμΌ“μ„ μ‚¬μš©ν•˜λŠ” 방법은 μ•„λž˜μ™€ κ°™λ‹€. void NonBlockSocketOperation() { s = socket(TCP); ...; s.connect(...); // 논블둝 μ†ŒμΌ“μœΌλ‘œ λ³€κ²½ s.SetNonBlocking(true); while (true) { r = s.send(dest, data); if (r == EWOULDBLOCK) { // λΈ”λ‘œν‚Ή 걸릴 μƒν™©μ΄μ—ˆλ‹€. 솑신을 μ•ˆ ν–ˆλ‹€. continu..
[Book] κ²Œμž„ μ„œλ²„ ν”„λ‘œκ·Έλž˜λ° κ΅κ³Όμ„œ - 3μž₯ μ†ŒμΌ“ ν”„λ‘œκ·Έλž˜λ° (1)
Β·
πŸ“ Book/✏ Game Server
3μž₯ μ†ŒμΌ“ ν”„λ‘œκ·Έλž˜λ° μ†ŒμΌ“μ€ 기본적으둜 파일 ν•Έλ“€κ³Ό λΉ„μŠ·ν•˜λ‹€. λ””μŠ€ν¬μ— κΈ°λ‘ν•˜κ±°λ‚˜ 읽어 듀일 λ•Œ 파일 핸듀을 μ‚¬μš©ν•˜λŠ” κ²ƒμ²˜λŸΌ λ„€νŠΈμ›Œν¬λ‘œ 데이터λ₯Ό μ „μ†‘ν•˜κ±°λ‚˜ 받을 λ•Œ μ†ŒμΌ“ 핸듀을 μ‚¬μš©ν•œλ‹€. 온라인 κ²Œμž„ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ μ†ŒμΌ“μ€ 파일 ν•Έλ“€ λ°©μ‹κ³ΌλŠ” μ•½κ°„ λ‹€λ₯΄λ‹€. TCP둜 ν†΅μ‹ ν•˜λŠ” 경우 ν΄λΌμ΄μ–ΈνŠΈ 개수만큼 μ†ŒμΌ“μ΄ μžˆμ–΄μ•Ό ν•˜λ―€λ‘œ κ²Œμž„ μ„œλ²„μ—μ„œ 닀루어야 ν•˜λŠ” μ†ŒμΌ“ κ°œμˆ˜κ°€ λ§Žλ‹€. 파일 핸듀을 ν•˜λŠ” λ™μ•ˆ μŠ€λ ˆλ“œκ°€ λŒ€κΈ°ν•˜λŠ” 일이 μ—†μ–΄μ•Ό ν•œλ‹€. μ΄λŸ¬ν•œ νŠΉμ§•μœΌλ‘œ λ„€νŠΈμ›Œν¬ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ μ†ŒμΌ“μ€ 보톡 비동기 μž…μΆœλ ₯ μƒνƒœλ‘œ 닀룬닀. 비동기 μž…μΆœλ ₯ λ°©μ‹μ—λŠ” 크게 λ…ΌλΈ”λ‘œν‚Ή μ†ŒμΌ“ 방식과 Overlapped I/O 방식이 μžˆλ‹€. 그리고 이 방식을 μ§„λ³΄μ‹œν‚¨ epollκ³Ό IOCP(I/O Completion Port) 방식이 많이 ν™œμš©λœλ‹€. ..
[Book] κ²Œμž„ μ„œλ²„ ν”„λ‘œκ·Έλž˜λ° κ΅κ³Όμ„œ - 2μž₯ 컴퓨터 λ„€νŠΈμ›Œν¬ (2)
Β·
πŸ“ Book/✏ Game Server
2μž₯ 컴퓨터 λ„€νŠΈμ›Œν¬ 6. 컴퓨터 λ„€νŠΈμ›Œν¬μ—μ„œ 데이터 보내기와 λ°›κΈ° UDP λ„€νŠΈμ›Œν‚Ή UDPλŠ” μ‚¬μš©μžκ°€ μ •μ˜ν•œ λ°μ΄ν„°κ·Έλž¨μ„ μƒλŒ€λ°©μ—κ²Œ 보낼 수 있게 ν•˜λŠ” 톡신 κ·œμ•½(ν”„λ‘œν† μ½œ)이닀. μ΄λ•Œ λ°μ΄ν„°κ·Έλž¨μ€ 64ν‚¬λ‘œλ°”μ΄νŠΈ μ΄ν•˜μ˜ 이진 λ°μ΄ν„°λ‘œ λ©”μ‹œμ§€ μ„±μ§ˆμ„ κ°€μ§„λ‹€. 즉, 데이터 일뢀가 λ­‰μΉ˜κ±°λ‚˜ μͺΌκ°œμ§€μ§€ μ•ŠλŠ”λ‹€. 데이터λ₯Ό μ£Όκ³ λ°›μœΌλ €λ©΄ μ†ŒμΌ“μ„ 생성해야 ν•œλ‹€. μ†ŒμΌ“μ€ 단말기 사이에 톡신할 수 있게 μš΄μ˜μ²΄μ œμ—μ„œ μ œκ³΅ν•˜λŠ” μžμ›μ΄λ‹€. μ•„λž˜λŠ” μ†ŒμΌ“μ„ μ΄μš©ν•΄ UDPλ₯Ό μ‚¬μš©ν•˜λŠ” 방법이닀. socket() ν•¨μˆ˜μ˜ λ§€κ°œλ³€μˆ˜λ‘œ UDPλ₯Ό μ“°κ² λ‹€κ³  μ„ μ–Έν•˜λ©΄ μ†ŒμΌ“μ„ μƒμ„±ν•˜κ³  μ†ŒμΌ“ 핸듀을 λ°˜ν™˜ν•œλ‹€. 데이터λ₯Ό μ£Όκ³ λ°›μœΌλ €λ©΄ 그전에 포트λ₯Ό ν• λ‹Ήν•΄μ•Ό ν•˜λŠ”λ°, bind() ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ—¬ ν• λ‹Ήν•œλ‹€. any_portλ₯Ό 포트 κ°’μœΌλ‘œ λ„£μœΌλ©΄ μš΄μ˜μ²΄μ œκ°€ μ•Œμ•„..
[Book] κ²Œμž„ μ„œλ²„ ν”„λ‘œκ·Έλž˜λ° κ΅κ³Όμ„œ - 2μž₯ 컴퓨터 λ„€νŠΈμ›Œν¬ (1)
Β·
πŸ“ Book/✏ Game Server
2μž₯ 컴퓨터 λ„€νŠΈμ›Œν¬ 1. 컴퓨터 λ„€νŠΈμ›Œν¬λ₯Ό κ΅¬μ„±ν•˜λŠ” κΈ°κΈ° 컴퓨터 λ„€νŠΈμ›Œν¬λŠ” 크게 단말기(terminal)와 λ„€νŠΈμ›Œν¬ 기기둜 κ΅¬μ„±λœλ‹€. λ‹¨λ§κΈ°λž€ 톡신을 ν•˜λŠ” 주체λ₯Ό μ§€μΉ­ν•œλ‹€. 즉, 무선 ν˜Ήμ€ μœ μ„  λ„€νŠΈμ›Œν¬ μ—°κ²° λ‹¨μžλ₯Ό κ°€μ§„ 컴퓨터, μŠ€λ§ˆνŠΈν°μ„ λ§ν•œλ‹€. λ‹¨λ§κΈ°λŠ” ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„λ‘œ κ΅¬λΆ„ν•˜λŠ”λ°, μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ˜€λŠ” 데이터λ₯Ό λ°›μ•„μ„œ μ²˜λ¦¬ν•œ ν›„ κ·Έ κ²°κ³Όλ₯Ό ν΄λΌμ΄μ–ΈνŠΈμ— νšŒμ‹ ν•˜λŠ” 역할을 ν•œλ‹€. κ°€μž₯ 기본적인 컴퓨터 λ„€νŠΈμ›Œν¬ ꡬ성은 두 단말기λ₯Ό 직접 λ„€νŠΈμ›Œν¬ μΌ€μ΄λΈ”λ‘œ μ—°κ²°ν•˜λŠ” 것이닀. ν•˜μ§€λ§Œ μ΄λ ‡κ²Œ κ΅¬μ„±ν•˜λ©΄ 단말기 두 λŒ€λ°–μ— μž‘λ™ν•˜μ§€ λͺ»ν•œλ‹€. λŒ€λΆ€λΆ„μ€ 단말기 사이에 λ„€νŠΈμ›Œν¬ μŠ€μœ„μΉ˜λΌλŠ” κΈ°κΈ°λ₯Ό 두고 단말기듀과 λ„€νŠΈμ›Œν¬ 케이블(λžœμ„ )둜 μ—°κ²°ν•˜μ—¬ κ΅¬μ„±ν•œλ‹€. μ΄λŸ¬ν•œ ꡬ성을 둜컬 μ§€μ—­ λ„€νŠΈμ›Œν¬(Local Area Ne..
[Book] κ²Œμž„ μ„œλ²„ ν”„λ‘œκ·Έλž˜λ° κ΅κ³Όμ„œ - 1μž₯ λ©€ν‹° μŠ€λ ˆλ”© (3)
Β·
πŸ“ Book/✏ Game Server
1μž₯ λ©€ν‹° μŠ€λ ˆλ”© 10. μ‹±κΈ€ μŠ€λ ˆλ“œ κ²Œμž„ μ„œλ²„ λ§Žμ€ μƒμš© κ²Œμž„ μ„œλ²„λŠ” CPUκ°€ μ—¬λŸ¬ μ½”μ–΄λ‘œ κ΅¬μ„±λ˜μ–΄ μžˆλ‹€. λ”°λΌμ„œ κ²Œμž„ μ„œλ²„λ₯Ό μ‹±κΈ€ μŠ€λ ˆλ“œλ‘œ κ΅¬λ™ν•˜λŠ” 경우 μ½”μ–΄ ν•˜λ‚˜λ§Œ μ‚¬μš©ν•˜κ²Œ λ˜λŠ” λΉ„νš¨μœ¨μ„± λ¬Έμ œκ°€ 생긴닀. κ·Έλž˜μ„œ μ‹±κΈ€ μŠ€λ ˆλ“œ μ„œλ²„λ₯Ό κ΅¬λ™ν•˜λŠ” 경우 CPU 개수만큼 ν”„λ‘œμ„ΈμŠ€λ₯Ό λ„μš°λŠ” 것이 μΌλ°˜μ μ΄λ‹€. 각 μ„œλ²„ ν”„λ‘œμ„ΈμŠ€λŠ” 방을 μ—¬λŸ¬ 개 κ°€μ§€κ³  λ°©μ—μ„œλŠ” ν”Œλ ˆμ΄μ–΄ ν•˜λ‚˜ 이상이 μ‹±κΈ€ ν”Œλ ˆμ΄ ν˜Ήμ€ λ©€ν‹° ν”Œλ ˆμ΄λ₯Ό ν•œλ‹€. ν”Œλ ˆμ΄μ–΄ 정보λ₯Ό λ‘œλ”©ν•  λ•Œ λ°œμƒν•˜λŠ” λ””λ°”μ΄μŠ€ νƒ€μž„μ„ μ²˜λ¦¬ν•˜λŠ” κ³Όμ •μ—μ„œ 큰 μ‹œλ¦¬μ–Ό 병λͺ©μ΄ μΌμ–΄λ‚œλ‹€. 이λ₯Ό ν•΄κ²°ν•˜κ³ μž 비동기 ν•¨μˆ˜λ‚˜ 코루틴 같은 것을 μ‚¬μš©ν•˜κΈ°λ„ ν•œλ‹€. λ°© 개수만큼 μŠ€λ ˆλ“œλ‚˜ ν”„λ‘œμ„ΈμŠ€κ°€ 있으면 μŠ€λ ˆλ“œλ‚˜ ν”„λ‘œμ„ΈμŠ€ κ°„ μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ˜μ˜ νšŸμˆ˜κ°€ μ¦κ°€ν•œλ‹€. 같은 λ™μ‹œμ ‘μ†μžλ₯Ό μ²˜λ¦¬ν•˜λŠ” μ„œλ²„λΌκ³  ν•˜..