윈도우 서버 중 가장 최신(사실 10년도 넘었지만..)의 서버 모델로, 낮은 CPU부하와 저지연, 안정성이 장점인 모델이다. 초당 패킷 처리량이 많은 데이터베이스 서버나 스트리밍 서버에 사용하면 엄청난 양의 패킷을 처리하기에 용이하다. 비슷한 모델로 Linux의 io_uring이 있다. RIO로 만들어진 서버는 국내에서 '리니지W'가 유일하다. 거의 모든 MMO서버는 IOCP를 사용하기 때문에 자료가 거의 없다시피 하다.
- 구성모님이 자료를 긁어모아 만든 슬라이드
https://www.slideshare.net/sm9kr/windows-registered-io-rio- 해외 서버개발자 커뮤니티에서 연구한 자료
https://serverframework.com/categories/winsock-registered-i/o.html- Microsoft build 2011 '저지연 네트워크 앱을 개발하는 신기술' ※저화질 주의※
https://learn.microsoft.com/en-us/events/build-build2011/sac-593t
유저와 커널이 공유할 메모리를 등록한다.
스택, 힙메모리 말고도 가상메모리를 사용하기도 한다.
RIORegisterBuffer로 등록할 수 있고, RIODeregisterBuffer하면 등록해제된다.
RIO에서 사용할 고정크기의 RQ(Request Queue), CQ(Completion Queue)를 등록해야한다. Send, Receive는 RQ를 통해 이루어지고, 비동기 완료는 CQ를 통해 얻어와진다.
앞에서 말한듯이 RIO는 Event나 IOCP와 함께 사용이 가능하다.
혼용하기 위해선 RIO_NOTIFICATION_COMPLETION를 사용해 CQ를 생성하고, RIONotify를 사용해
WaitForSingleObject, WaitForMultipleObjects나 GQCS, GQCSEx에 알림을 줄 수 있다.
이 시리즈에서는 TCP를 이용해 에코서버를 만들어볼 것이다. 처음에 UDP로 도전했다가 성공하지 못했다...
왜인지는 모르겠으나 RIO UDP서버와 일반 UDP클라이언트가 서로 연동되지 않는 문제가 발생해 TCP로 결정했다.
10년도 넘었는데 새로 만들어주시면 안되나요?