Notice
Recent Posts
Recent Comments
Link
관리 메뉴

λͺ©λ‘μ „체 κΈ€ (1096)

KoreanFoodie's Study

[C++ κ²Œμž„ μ„œλ²„] 3-8. Select λͺ¨λΈ

[C++ κ²Œμž„ μ„œλ²„] 3-8. Select λͺ¨λΈ 핡심 : 1. Select λͺ¨λΈμ„ μ‚¬μš©ν•˜λ©΄ μ†ŒμΌ“μ˜ μœ νš¨μ„±μ„ 데이터λ₯Ό μ£Όκ³  λ°›κΈ° 전에 미리 체크할 수 μžˆλ‹€. 2. κ΄€μ°°ν•˜κ³ μž ν•˜λŠ” μ†ŒμΌ“μ„ fd_set 에 λ„£κ³ , select ν•˜λ©΄ 관찰이 μ‹œμž‘λ˜λ©°, 적어도 ν•˜λ‚˜μ˜ μ†ŒμΌ“μ΄ μ€€λΉ„λ˜λ©΄ λ¦¬ν„΄λœλ‹€(λ‚™μ˜€μžλŠ” μ•Œμ•„μ„œ 제거됨) 3. μ„Έμ…˜μ„ μ΄μš©ν•΄μ„œ μ†ŒμΌ“μ„ 관리할 수 μžˆλ‹€. μ„Έμ…˜μ€ 두 κΈ°κΈ°κ°„μ˜ 톡신이 μ—°κ²°λ˜μ—ˆμ„ λ•Œ κ΅¬μΆ•λ˜κ³ , λŠκ²Όμ„ λ•Œ νŒŒκ΄΄λ˜λŠ” μ–‘λ°©ν–₯ 링크라고 μƒκ°ν•˜λ©΄ λœλ‹€. 이번 μ‹œκ°„μ—λŠ” select ν•¨μˆ˜κ°€ 핡심이 λ˜λŠ” Selet λͺ¨λΈμ— λŒ€ν•΄ μ•Œμ•„λ³΄μž. Select λͺ¨λΈμ„ μ‚¬μš©ν•˜λ©΄ μ†ŒμΌ“ ν•¨μˆ˜ 호좜이 성곡할 μ‹œμ μ„ 미리 μ•Œ 수 μžˆλ‹€. 이것은 μ•„λž˜μ™€ 같은 μƒν™©μ—μ„œ 큰 이점으둜 μž‘μš©ν•œλ‹€ : λΈ”λ‘œν‚Ή μ†ŒμΌ“ : 쑰건이 λ§Œμ‘±λ˜μ§€ μ•Šμ•„μ„œ ..

Game Dev/Game Server 2023. 9. 25. 16:35
[C++ κ²Œμž„ μ„œλ²„] 3-7. λ…ΌλΈ”λ‘œν‚Ή μ†ŒμΌ“

[C++ κ²Œμž„ μ„œλ²„] 3-7. λ…ΌλΈ”λ‘œν‚Ή μ†ŒμΌ“ 핡심 : 1. λ…ΌλΈ”λ‘œν‚Ή μ†ŒμΌ“μ€, λΈ”λ‘œν‚Ή μ†ŒμΌ“κ³Ό λ‹€λ₯΄κ²Œ μ—°κ²° 및 μ†‘μˆ˜μ‹ μ΄ μΌμ‹œμ μœΌλ‘œ λΆˆκ°€λŠ₯ν•œ 경우, SpinLock 처럼 while 문을 돌며 λ‹€μ‹œ μ‹œλ„λ₯Ό ν•œλ‹€. 2. λ…ΌλΈ”λ‘œν‚Ή μ†ŒμΌ“μ„ λ§Œλ“œλŠ” 것은 κ°„λ‹¨ν•˜λ‹€. ioctlsocket 을 μ‚¬μš©ν•˜λ©΄ λœλ‹€. 3. λ…ΌλΈ”λ‘œν‚Ή μ†ŒμΌ“ μ‚¬μš©μ‹œ, WSAEWOULDBLOCK μ—λŸ¬κ°€ λ‚˜μ˜¬ 경우, λ‹€μ‹œ μ‹œλ„ν•œλ‹€. μ΄λŠ” μ†‘μˆ˜μ‹  λ²„νΌμ˜ μƒνƒœκ°€ λΉ„μ–΄ μžˆκ±°λ‚˜ 가득 μ°¨ μžˆμ–΄ μ†‘μˆ˜μ‹ μ΄ λΆˆκ°€λŠ₯ν•œ μž„μ‹œμ μΈ μƒνƒœμ΄κΈ° λ•Œλ¬Έμ΄λ‹€. μš°λ¦¬κ°€ 이전 κΈ€μ—μ„œ ν™œμš©ν–ˆλ˜ 것은 μ†ŒμΌ“μ€ λΈ”λ‘œν‚Ή μ†ŒμΌ“μ΄λ‹€. λ”°λ‘œ μ˜΅μ…˜μ„ μ„€μ •ν•œ 것 κ°™μ§€λŠ” μ•Šμ€λ°? κ·ΈλŸΌμ—λ„ λΆˆκ΅¬ν•˜κ³ , μš°λ¦¬κ°€ λ§Œλ“  μ†ŒμΌ“μ΄ 기본적으둜 λΈ”λ‘œν‚Ή μ†ŒμΌ“μœΌλ‘œ 작힌 것인데.. λ…ΌλΈ”λ‘œν‚Ή μ†ŒμΌ“μ„ μ΄μ•ΌκΈ°ν•˜κΈ° 전에 λ¨Όμ € λΈ”λ‘œν‚Ή μ†ŒμΌ“..

Game Dev/Game Server 2023. 9. 25. 11:07
[C++ κ²Œμž„ μ„œλ²„] 3-5. UDP μ„œλ²„ μ‹€μŠ΅

[C++ κ²Œμž„ μ„œλ²„] 3-5. UDP μ„œλ²„ μ‹€μŠ΅ 핡심 : 1. UDP λŠ” TCP 와 λ‹€λ₯΄κ²Œ, νŒ¨ν‚· κ°„μ˜ 경계가 있고 속도가 λΉ λ₯΄λ‹€. λ‹€λ§Œ νŒ¨ν‚·μ˜ μˆœμ„œκ°€ 보μž₯λ˜μ§€ μ•ŠμœΌλ©°, 데이터가 μœ μ‹€λ  μœ„ν—˜μ΄ μ‘΄μž¬ν•œλ‹€. 2. UDP μ‹€μŠ΅μ˜ 경우, TCP μ‹€μŠ΅ μ½”λ“œμ—μ„œ ::connect 와 ::listen 만 μ—†μœΌλ©΄ λ‘œμ§μ€ 거의 λ™μΌν•˜λ‹€. 3. UDP λŠ” Connected UDP(μΌμ’…μ˜ 즐겨찾기 κΈ°λŠ₯)을 ν™œμš©ν•˜λ©΄, sendto λŒ€μ‹  send λ₯Ό, recvfrom λŒ€μ‹  recv λ₯Ό μ‚¬μš©ν•˜μ—¬ API λ₯Ό 더 κ°„λ‹¨ν•˜κ²Œ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€. μ €λ²ˆμ—λŠ” TCP λ°©μ‹μœΌλ‘œ 데이터λ₯Ό μ „μ†‘ν•˜λŠ” μ‹€μŠ΅μ„ ν–ˆμœΌλ‹ˆ, μ΄λ²ˆμ—λŠ” UDP λ°©μ‹μœΌλ‘œ 데이터λ₯Ό 전솑해 보자. 사싀 그리 λ‹€λ₯΄μ§€λŠ” μ•Šλ‹€. 쑰금 κ°„μ†Œν™”λ˜μ—ˆλ‹€κ³  ν•˜λ©΄ 될까? 3-2 에 보면 기본적으둜 μ†ŒμΌ“..

Game Dev/Game Server 2023. 9. 22. 14:18
[C++ κ²Œμž„ μ„œλ²„] 3-4. TCP vs UDP

[C++ κ²Œμž„ μ„œλ²„] 3-4. TCP vs UDP 핡심 : 1. TCP 와 UDP λŠ” λ„€νŠΈμ›Œν¬ ν”„λ‘œν† μ½œ 쀑, 트랜슀포트 λ ˆμ΄μ–΄μ— ν•΄λ‹Ήν•˜λŠ” κ·œμΉ™μ΄λ‹€. 2. TCP λŠ” μ•ˆμ „ν•˜λ©°(데이터 μœ μ‹€μ΄ μ—†μŒ), λ°μ΄ν„°μ˜ μˆœμ„œκ°€ 보μž₯λœλ‹€. ν•˜μ§€λ§Œ 각 νŒ¨ν‚·μ˜ 경계(Boundary)κ°€ μ—†μ–΄ 데이터가 ν•©μ³μ§€κ±°λ‚˜ μͺΌκ°œμ§ˆ 수 있으며, UDP 에 λΉ„ν•΄ μƒλŒ€μ μœΌλ‘œ λŠλ¦¬λ‹€. 3. UDP λŠ” λΉ λ₯΄λ©°(일단 데이터λ₯Ό 보내고 λ΄„), νŒ¨ν‚·μ˜ 경계가 μžˆμ–΄ 데이터가 μͺΌκ°œμ§€κ±°λ‚˜ 합쳐지지 μ•ŠλŠ”λ‹€. ν•˜μ§€λ§Œ νŒ¨ν‚· μ „μ†‘μ˜ μˆœμ„œκ°€ 보μž₯λ˜μ§€ μ•ŠμœΌλ©°, 데이터가 μœ μ‹€λ  μœ„ν—˜μ„±μ΄ μžˆλ‹€. 이번 κΈ€μ—μ„œλŠ” κ°„λ‹¨νžˆ TCP 와 UDP 의 차이에 λŒ€ν•΄ μ•Œμ•„λ³΄λ„λ‘ ν•˜μž. λ„€νŠΈμ›Œν¬ 곡뢀λ₯Ό 깊게 ν•˜μ§€ μ•Šμ•˜μ–΄λ„, μ˜€λ©°κ°€λ©° κ·Έ λ‘˜μ˜ 차이에 λŒ€ν•΄μ„œλŠ” μ•Œκ²Œ λ˜λŠ”λ°, 이번 κΈ€μ—μ„œλŠ” 그에 ..

Game Dev/Game Server 2023. 9. 21. 20:13
[C++ κ²Œμž„ μ„œλ²„] 3-3. TCP μ„œλ²„ μ‹€μŠ΅

[C++ κ²Œμž„ μ„œλ²„] 3-3. TCP μ„œλ²„ μ‹€μŠ΅ 핡심 : 1. TCP μ—μ„œλŠ” μ†‘μˆ˜μ‹  버퍼가 μ‘΄μž¬ν•˜λ©°, 톡신을 ν•  λ•Œ 버퍼에 데이터λ₯Ό λ‹΄κ³  κΊΌλ‚΄λŠ” λ°©μ‹μœΌλ‘œ 톡신이 이루어진닀. 2. ν΄λΌμ—μ„œ 솑신을 ν•˜λ €κ³  ν•˜λŠ”λ° 솑신 버퍼가 가득 μ°¨ μžˆκ±°λ‚˜, μ„œλ²„μ—μ„œ μˆ˜μ‹ μ„ ν•˜λ €κ³  ν•˜λŠ”λ° μˆ˜μ‹  버퍼가 λΉ„μ–΄ 있으면 Blocking μƒνƒœμ— λŒμž…ν•œλ‹€. 3. μ‹ κΈ°ν•˜κ²Œλ„, 버퍼 λ‚΄ 각 데이터 λ³„λ‘œλŠ” λͺ…ν™•ν•œ 경계가 μ—†μ–΄ λ°μ΄ν„°λŠ” ν•©μ³μ§€κ±°λ‚˜ μͺΌκ°œμ Έμ„œ 인식될 수 μžˆλ‹€. μ €λ²ˆμ— μ†ŒμΌ“ ν”„λ‘œκ·Έλž˜λ° 기초λ₯Ό λ‹€λ£¨λ©΄μ„œ, μ†ŒμΌ“μ„ λ§Œλ“€κ³ , μ£Όμ†Œλ₯Ό ν• λ‹Ήν•˜κ³ , μ†ŒμΌ“κ³Ό μ£Όμ†Œλ₯Ό ν• λ‹Ήν•œ ν›„, μ‹€μ œλ‘œ 톡신을 ν•΄λ³΄λŠ” μ‹€μŠ΅μ„ μ§„ν–‰ν–ˆλ‹€. 이번 μ‹œκ°„μ—λŠ” TCP μ‹€μŠ΅μ„ ν•΄ λ³Ό μ˜ˆμ •μ΄λ‹€. μ½”λ“œμ™€ PPT λ₯Ό λ³΄λ©΄μ„œ, μ‹€μŠ΅μ„ 진행해 보자. 일단 μ €λ²ˆ μ‹œκ°„μ— μ†ŒμΌ“ 바인딩 μž‘μ—… ..

Game Dev/Game Server 2023. 9. 21. 13:29
[C++ κ²Œμž„ μ„œλ²„] 3-2. μ†ŒμΌ“ ν”„λ‘œκ·Έλž˜λ° 기초 #2

[C++ κ²Œμž„ μ„œλ²„] 3-2. μ†ŒμΌ“ ν”„λ‘œκ·Έλž˜λ° 기초 #2 핡심 : 1. μ†ŒμΌ“ ν”„λ‘œκ·Έλž˜λ° μ…‹μ—…μ—λŠ” μ—¬λŸ¬ API 듀을 ν†΅ν•œ μ„ΈνŒ…μ΄ ν•„μš”ν•˜λ‹€. ν•˜μ§€λ§Œ λ„ˆλ¬΄ 겁먹지 말고, νλ¦„λ§Œ μ΄ν•΄ν•˜μž. 2. ν΄λΌμ΄μ–ΈνŠΈ μͺ½μ—μ„œλŠ” ν•Έλ“œν° κ΅¬μž…(clientμ†ŒμΌ“ μ„ΈνŒ…)κ³Ό κ°€κ²Œμ˜ μœ„μΉ˜μ™€ 번호(μ„œλ²„ IP μ£Όμ†Œμ™€ 포트)λ₯Ό μ•Œμ•„λ‚Έ ν›„, μ—°κ²°(::connect)을 μ‹œλ„ν•˜κΈ°λ§Œ ν•˜λ©΄ λœλ‹€. 3. μ„œλ²„ μͺ½μ—μ„œλŠ” ν•Έλ“œν° κ΅¬μž…(listen μ†ŒμΌ“ μ„ΈνŒ…) ν›„, κ°€κ²Œμ˜ μœ„μΉ˜μ™€ 번호(μ„œλ²„ IP μ£Όμ†Œμ™€ 포트)λ₯Ό μ„€μ •ν•œ ν›„, μ•ˆλ‚΄μ›μ˜ 폰을 κ°œν†΅(μ†ŒμΌ“κ³Ό μ„œλ²„ μ£Όμ†Œ ::bind)ν•˜κ³  μ˜μ—…μ„ μ‹œμž‘(::listen)ν•˜λ©΄ λœλ‹€. 이제 μ €λ²ˆμ— μ΄μ•ΌκΈ°ν–ˆλ˜ κ°œλ…μ„ λ°”νƒ•μœΌλ‘œ, μ‹€μ œ μ½”λ“œλ₯Ό 보자. μ•„λ§ˆ μ΅μˆ™μΉ˜ μ•Šμ€ μ½”λ“œκ°€ μž”λœ© λ“±μž₯을 ν•˜κ²Œ 될 텐데, ν•˜λ‚˜ν•˜λ‚˜ μ „λΆ€ μ•Œμ•„μ•Ό ν•œλ‹€..

Game Dev/Game Server 2023. 9. 20. 23:42
[C++ κ²Œμž„ μ„œλ²„] 3-1. μ†ŒμΌ“ ν”„λ‘œκ·Έλž˜λ° 기초 #1

[C++ κ²Œμž„ μ„œλ²„] 3-1. μ†ŒμΌ“ ν”„λ‘œκ·Έλž˜λ° 기초 #1 핡심 : 1. μ†ŒμΌ“ ν”„λ‘œκ·Έλž˜λ°μ„ 고객(ν΄λΌμ΄μ–ΈνŠΈ)와 κ°€κ²Œ(μ„œλ²„) 관계에 λΉ„μœ ν•˜μ—¬ κ°œλ…μ„ 이해해 λ‘μž. λ“œλ””μ–΄ κΈ°λ‚˜κΈ΄ Memory κ΄€λ ¨ ν¬μŠ€νŒ…μ„ 마치고, 이제 λ„€νŠΈμ›Œν¬ ν”„λ‘œκ·Έλž˜λ°μœΌλ‘œ λ“€μ–΄κ°„λ‹€. λ¨Όμ € μ†ŒμΌ“ ν”„λ‘œκ·Έλž˜λ°μ„ 본격적으둜 μ‹œμž‘ν•˜κΈ° 전에, κ°„λ‹¨ν•œ κ°œλ…μ„ 짚고 λ„˜μ–΄κ°€ 보자. 참고둜, μ΄ν•΄μ—λŠ” μ˜ˆμ‹œκ°€ μ΅œκ³ λ‹€. λ¨Όμ €, μš°λ¦¬κ°€ 쀑ꡭ집에 μ „ν™”λ₯Ό ν•œλ‹€κ³  ν•΄ 보자. 그런데 이 쀑ꡭ집은 유λͺ…ν•˜κ³  큰 곳이라, μ „ν™”λ₯Ό λ°›λŠ” μ•ˆλ‚΄ μš”μ›μ΄ λ”°λ‘œ μ‘΄μž¬ν•œλ‹€. μš°λ¦¬λŠ” 쀑ꡭ집에 λ“±λ‘λœ λŒ€ν‘œ μ „ν™”λ‘œ μ „ν™”λ₯Ό κ±Έκ³ , μš©κ±΄μ„ μ „λ‹¬ν•œλ‹€. 그러면 μ•ˆλ‚΄μ›μ€ μš©κ±΄μ— λ§žλŠ” μž‘μ—…μžμ˜ 번호λ₯Ό μ•Œλ €μ€€λ‹€. 그럼 이제 λ‹€μŒλΆ€ν„°λŠ” λŒ€ν‘œ μ „ν™”λ₯Ό 톡해 쀑ꡭ집에 연락할 ν•„μš” 없이, ν…Œμ΄λΈ”μ— 앉아 μžˆλŠ” μž‘μ—…..

Game Dev/Game Server 2023. 9. 19. 17:48