토이프로젝트 - IOCP 서버와 유니티 클라이언트 구현(winsock2, cpp)
·
windows
네트워크 수업 자유 주제 과제로 IOCP 서버에 유니티 연동해서 클라이언트 구현함.아무래도 과제용이니까.. 대부분의 기능을 쳐냈음그래서 Accept 도 동기로 처리하고.. 패킷 처리도 엉성하고.. ​Unity3d 와 연동하는 자료는 찾아도 안나오니 공부하는데 참고만 하길 바람니당 ​​유니티 클라이언트에서는 해당 dummy들의 좌표 이동을 시각화해서 볼 수 있고 채팅 가능함server/client 디렉토리의 client.cpp : dummy를 N(defined)개 서버에 접속시키고 매 초당 무작위로 이동 (x,y : -1,1)유니티 클라이언트에서 시각화할때 유의미한 결과를 보여주기 위해서 제공한 기능/client 디렉토리는 unity project : 그냥 유니티의 tcpClient로 접속해서 cpp와 c..
IOCP(IO Completion Port) 쉽게 이해하기
·
windows
IOCP(IO Completion Port) 란?Windows 운영체제에서 제공하는 비동기 I/O 처리 모델게임 서버에서 사용해서 착각하는데, 소켓 네트워크 기술이 아니라 이벤트 기반 I/O 처리 방법론이다.​Linux는 소켓을 파일 디스크립터로 동일시하는 반면, 윈도우는 별개로 구분한다.​IOCP = Overlapped IO + ThreadPool + Completion Queue​​중첩 입출력(Overlapped I/O)비동기 I/O 작업을 가능하게 하는 Windows 기술I/O처리 요청을 스레드가 디바이스 드라이버에 위임하고 I/O작업 종료까지 해당 스레드는 다른 작업을 수행device driver가 IO 작업을 처리하고, 완료되면 이벤트 객체를 통해 전달IO 요청한 쓰레드가 이벤트를 확인하고 결과..
우당탕탕 C++로 Apache Kafka 통신하기 (rdkafka, modern-cpp-kafka)
·
kafka
librdkafka 라이브러리를 통해서 Windows 환경에서 C++로 Apache Kafka를 사용하고자 했다.백엔드로 구축한 로비 서버와 dedicated 서버간의 통신하기 위한 메세징 큐로 뛰어난 성능의 이벤트 브로커인 Kafka를 채택했었다.​IO Completion Port로 윈도우 환경에서 비동기, Non-Blocking IO 통신을 구축한 게임 서버와 통신해야할 로비 서버도 역시 블로킹 동작을 막기 위해서 Spring Webflux로 Netty 기반의 비동기 Non-Blocking IO를 구현했다.​서버간의 IPC 역시 블로킹 작업이 이뤄지면 오히려 일반적인 구조의 서버보다 느려지기 때문에 비동기로 이뤄져야한다!!순전히 흥미본위로 시작한 기술 프로젝트에 가깝지만, 너무 어려워도 재밌다.​​m..