게임 서버는 다뤄야 할 클라이언트 소켓의 수가 많다. 온라인 게임들을 보면 월드 하나의 수 십명의 플레이어들이 있는데, 이 플레이어 한명 한명이 서버와 통신하는 클라이언트 소켓이 되시겠다.소켓에 대해 얘기하기 전, 짚고 넘어갈 것이 있다.소켓 프로그래밍을 접하기 전까지
이전 시간에 소켓에 대해 다뤘다. 이제 실시간으로 양방향 통신을 하는 이녀석에 대해 파헤칠 시간이다. 소켓 이녀석은 블로킹/논블로킹, 동기/비동기로 나뉘어지는데, 이번 시간에는 블로킹에 대해 다뤄보고자 한다.그렇다. 말 그대로 '막는다' 그 자체를 뜻한다. 특정 디바이
이번엔 논블로킹에 대해 알아보자. 한 작업이 완료될 때까지 CPU 연산을 하지 않고 대기 상태에 빠지는 것을 블로킹이라고 배웠는데, 논블로킹은 반대로 보면 된다. 작업이 완료될 때까지 대기하는 것이 아니라, 작업 요청을 보낸 다음 다른 작업을 할 수 있다. 그리고 완
회사에 복직해서 따로 공부할 시간이 없다. 몰아서 쓰는 것을 피하고 싶지만 어쩔 수 없다.. 논블로킹 소켓은 블로킹에 빠지지 않고 송수신을 기다리는 동안 다른 작업을 할 수 있고 하나의 스레드에서 여러 개의 소켓을 다룰 수 있다는 장점이 있다. 하지만 이 완벽할 것만
논블로킹과 Overlapped I/O(비동기 I/O)에 대해 알아보았다. 이 둘의 차이점을 간단하게 정리할 수 있다. 논블로킹에서의 I/O 실행 상태는 버퍼의 공간으로 판단할 수 있다. 송신 버퍼에 1바이트라도 데이터가 들어갈 수 있다면 송신할 수 있는 상태로 판단
Overlapped는 신인가? Overlapped I/O는 논블록 소켓의 리소스 낭비와 데이터 블록의 복사 연산을 해야 하는 단점을 보완했다. 이제 단순하게 I/O 처리 중인지 완료되었는지만 확인하면 된다. > 하지만 게임 서버 입장에서 보면, 아직 갈길은 멀다.
epoll은 하나의 서버 스레드가 여러 개의 논블로킹 소켓을 다룰 때 유용하다면, IOCP(I/O Completion Port)는 다수의 Overlapped I/O을 처리하는데 유용하다. IOCP는 Overlapped가 등록된 소켓이 I/O 처리가 완료되면 이를 사용자