회사에서 이번주까지 작업한 건 poller라는 간단한 클래스 템플릿이었다. (따지고보면 그리 간단치도 않다)
request-complete모델을 기반으로 비동기적 IO를 처리하는 프레임워크인데 request메소드를 통해 여러타입의 io작업을 요청하고 poll메소드를 통해 요청했던 io의 인스턴스를 되돌려 받음으로써 완료를 통지받는 형태의 작업으로 network io + C10K문제(1만의 동시접속자를 처리하는 문제)를 해결하기 위해 kqueue/iocp/epoll등의 OS지원을 단일 인터페이스로 사용하기 위한 코드다.
1.
이 코드를 작업하다 보니, 기존에 만들어 쓰던 Socket Wrapper가 전혀 의미가 없다는 사실을 깨달았다. 어차피 Socket에서 사용하는 작업들은 connect/listen/bind/send/recv/close 정도 인데다 굳이 복잡하게 소켓 API를 만들 필요가 없는거다. 그냥 Request & Forget형태로 상황에 맞는 코드, event-driven형식을 강요하면 문제가 해결된다.
게다가, 어차피 iocp지원을 위해서는 표준적인 send/recv가 아닌 Winsock에만 존재하는 WSASend/Recv를 써야하고 결국은 각 시스템에 맞는 별도의 코드를 구현해야 한다. 이건 DriverT라는 템플릿 매개변수로 빼두었기 때문에 그다지 큰 문제가 될 것 같지는 않다.
2.
io작업이 아닌 XML Pull Parser나 asynchronous task같은 서비스도 이런 형태로 구현이 가능하다.
3.
생각해보니 결국은 event-driven programming. 하지만 해볼 가치는 있는듯. 그나저나 철학이든 뭐든 죄다 난 늦게 깨닫는단 말이야. 쳇.
4.
자 이제 취미로 놀면 되는거다.