현재 프로젝트는 여러 장비에 대한 정보를 저장하는 대규모 서버다. 대량이라고 해봐야 최소 5000TPS, 목표는 50000TPS 정도이긴 하다. 어쨌든 대량의 통신을 처리하기 위해서는 대량의 connection을 처리하는 방법이 필요하며, 이런 라이브러리에 대한 탐색을 해본 결과, 직접적으로 epoll 같은 걸 사용하거나, libevent와 같은 라이브러리를 사용하는 방법이 존재하였다.
다른 방법을 사용할 수도 있으나 어쨌든 앞으로도 많이 사용해야 할 일이 있어서 안정적인 라이브러리를 선택하기로 하였으며, 이에 적당한 것이 libevent로 보였다. 근거가 있어야 하지만, 어쨌든 전문가의 추천이 있었으므로 일단 libevent를 사용하기로 하였다.
사용법
라이브러리를 초기화하기 위해서는 event_base를 생성하며 해당 event_base에 event를 할당하는 방식으로 이루어진다.
구체적인 것은 소스 코드를 보아야 하겠지만, API 만을 봤을 때 event_base는 event_loop를 위한 추상화로 보이고, event는 실제 이벤트를 의미하는 것으로 보인다. 즉, eventbase를 생성한 후에 event loop를 돌린 후에, 자신이 감시하고 싶은 event를 생성한 후, 이를 다시 eventbase에 할당하면 된다.
1. eventbase 생성 : 기초적인 라이브러리의 초기화
2. event loop 실행 : 계속적인 감시와 event에 따른 callback을 실행하기 위해 지속적으로 event loop를 실행한다.
3. event 초기화 : 감시 하기 위한 event의 초기화
4. event 추가 : eventbase에 감시할 event를 추가
1과 2 사이에 최초에 감시할 event를 추가하기 위해 한 번의 3,4가 추가되기도 한다.
eventbase의 생성하는 방법
- event_init
- event_base_new
두 가지는 기본적으로 동일하지만, event_init는 global한 default event_base를 만들어내지만, event_base_new는 global event_base가 존재하지 않는다. event_init는 의식하지 못 한채로 Global event base를 교체해버릴 위험성이 존재하므로 앞으로 없어질 함수이다. event_init는 obsolete지만, 현재도 지원되고 있으며 이전에는 이것만이 존재하였으므로 많이들 현재도 사용하는 것으로 보인다. 장점이 있다면 event를 생성하면 자동으로 attach될 event_base가 존재한다는 게 장점이라면 장점이랄까?
event_base_new를 사용한다면, 기본적으로 event는 어떤 eventbase에도 할당되지 않으므로, 생성 후에 항상 event를 eventbase에 할당해야 한다. event_set이던가로 할당한다.
event를 생성/할당
Reference
- libevent Book( http://www.wangafu.net/~nickm/libevent-book/TOC.html )
- libevent homepage ( http://www.monkey.org/~provos/libevent/ )
- event_init
- event_base_new
두 가지는 기본적으로 동일하지만, event_init는 global한 default event_base를 만들어내지만, event_base_new는 global event_base가 존재하지 않는다. event_init는 의식하지 못 한채로 Global event base를 교체해버릴 위험성이 존재하므로 앞으로 없어질 함수이다. event_init는 obsolete지만, 현재도 지원되고 있으며 이전에는 이것만이 존재하였으므로 많이들 현재도 사용하는 것으로 보인다. 장점이 있다면 event를 생성하면 자동으로 attach될 event_base가 존재한다는 게 장점이라면 장점이랄까?
event_base_new를 사용한다면, 기본적으로 event는 어떤 eventbase에도 할당되지 않으므로, 생성 후에 항상 event를 eventbase에 할당해야 한다. event_set이던가로 할당한다.
event를 생성/할당
Reference
- libevent Book( http://www.wangafu.net/~nickm/libevent-book/TOC.html )
- libevent homepage ( http://www.monkey.org/~provos/libevent/ )