[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 ๊ฐœ์ˆ˜๋งŒํผ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋„์šฐ๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค. ๊ฐ ์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค๋Š” ๋ฐฉ์„ ์—ฌ๋Ÿฌ ๊ฐœ ๊ฐ€์ง€๊ณ  ๋ฐฉ์—์„œ๋Š” ํ”Œ๋ ˆ์ด์–ด ํ•˜๋‚˜ ์ด์ƒ์ด ์‹ฑ๊ธ€ ํ”Œ๋ ˆ์ด ํ˜น์€ ๋ฉ€ํ‹ฐ ํ”Œ๋ ˆ์ด๋ฅผ ํ•œ๋‹ค. ํ”Œ๋ ˆ์ด์–ด ์ •๋ณด๋ฅผ ๋กœ๋”ฉํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋””๋ฐ”์ด์Šค ํƒ€์ž„์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณผ์ •์—์„œ ํฐ ์‹œ๋ฆฌ์–ผ ๋ณ‘๋ชฉ์ด ์ผ์–ด๋‚œ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ ์ž ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋‚˜ ์ฝ”๋ฃจํ‹ด ๊ฐ™์€ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•œ๋‹ค. ๋ฐฉ ๊ฐœ์ˆ˜๋งŒํผ ์Šค๋ ˆ๋“œ๋‚˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ์œผ๋ฉด ์Šค๋ ˆ๋“œ๋‚˜ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ์ปจํ…์ŠคํŠธ ์Šค์œ„์น˜์˜ ํšŸ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•œ๋‹ค. ๊ฐ™์€ ๋™์‹œ์ ‘์†์ž๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์„œ๋ฒ„๋ผ๊ณ  ํ•˜..
[Book] ๊ฒŒ์ž„ ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ต๊ณผ์„œ - 1์žฅ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋”ฉ (2)
ยท
๐Ÿ“ Book/โœ Game Server
1์žฅ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋”ฉ 6. ์ž„๊ณ„ ์˜์—ญ๊ณผ ๋ฎคํ…์Šค ๊ฒฝ์Ÿ ์ƒํƒœ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋Š” ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋Š” X๋ฅผ ๊ฑด๋“œ๋ฆฌ๋ ค๊ณ  ํ•˜๋ฉด ํ˜„์žฌ ์Šค๋ ˆ๋“œ๊ฐ€ X๋ฅผ ๋‹ค ์‚ฌ์šฉํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ฎคํ…์Šค(mutex)์ด๋‹ค. ๋ฎคํ…์Šค๋Š” ์ƒํ˜ธ ๋ฐฐ์ œ(mutual exclusion)์˜ ์ค„์ž„๋ง์ด๋‹ค. ๋ฎคํ…์Šค๋Š” ๋‹ค๋ฅธ ๋ง๋กœ ์ž„๊ณ„ ์˜์—ญ(critical section)์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค. C++์—์„œ ๋ฎคํ…์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ์Šค๋ ˆ๋“œ 1์ด โ‘ก์—์„œ ๋ฎคํ…์Šค ์‚ฌ์šฉ๊ถŒ์„ ์–ป๋Š” ๋ฐ ์„ฑ๊ณตํ•˜๋ฉด โ‘ข์œผ๋กœ ๋„˜์–ด๊ฐ„๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ 2๊ฐ€ ์ด๋ฏธ ๋ฎคํ…์Šค ์‚ฌ์šฉ๊ถŒ์„ ์–ป์€ ์ƒํƒœ๋ฉด ์Šค๋ ˆ๋“œ 1์€ ๋” ์ด์ƒ ์ง„ํ–‰ํ•˜์ง€ ๋ชปํ•˜๊ณ  ์ •์ง€๋œ๋‹ค. ํ•œํŽธ ์Šค๋ ˆ๋“œ 2๋Š” โ‘ข์„ ์‹คํ–‰ ํ›„ โ‘ฃ๋ฅผ ํ†ต๊ณผํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ๊ทธ์ œ์•ผ ์Šค๋ ˆ๋“œ 1์€ ๋ฎคํ…์Šค ์‚ฌ์šฉ๊ถŒ์„ ์–ป์–ด ์‹คํ–‰ ์ง€์ ์ด โ‘ข์œผ๋กœ ๋„˜์–ด..