Win32 에서 Reactor 방식으로 1000개 클라이언트 만들기?

42 views
Skip to first unread message

레이옷

unread,
Apr 10, 2006, 11:42:58 PM4/10/06
to kaug
안녕하세요? 레이옷입니다.

WMFO_Reactor 의 경우 핸들을 최대 62개만 등록할 수
있다고 알고 있습니다. 그렇다면 과연 reactor 방식으로
1000개 정도의 클라이언트 즉 이벤트 핸들러를
관리하려면 어떻게 해야 할까요?

TP_Reactor 는 Select_Reactor 를 상속받아서 쓸 수는 없을
듯하더군요. 당장 떠오르는 방식은, ( N / 62 ) + 1
만큼의 쓰레드를 생성하고 각각마다 WMFO_Reactor 의
이벤트 루프를 돌려주는 정도인데, 뭔가 더 깔끔한 게
없을까요?

redpixel

unread,
Apr 11, 2006, 1:03:17 AM4/11/06
to kaug...@googlegroups.com
win32 플렛폼상에서는 Reactor 프레임워크만 가지고는 불가능하다고 알고 있습니다. -_-;;; Proactor 프레임워크를 쓰는 것외에는 방법이 없을거라 생각됩니다. 굳이 ACE를 안쓰더라도 win32플렛폼에서는 Completion Port를 쓰는게 일반적이니까요. 저도 reactor 프레임워크가 쓰기가 편해서 좋아하는데, 큰 서버 개발에서는 제한적이니까요.

그리고 별도의 쓰레드를 생성해서 따로 관리하는 방식은 구현이 되어있습니다. ACE_TP_Reactor 구현을 참조해보세요.

06. 4. 11일에 레이옷 <Rei...@gmail.com>이(가) 작성:

miraro

unread,
Apr 12, 2006, 5:07:16 AM4/12/06
to kaug
흠 저두 맨처음에 고생한 부분이군요..
저두 reactor 로 구현 된 전 개발자가 만들어 놓은
소스가 잇었는데
고생을 했엇죠...
저는 그래서 Proactor 로 구현을 했습니다...
reactor쪽은 리눅스 시스템쪽에 맞는 걸로 알고요..
proactor쪽 으로 바꾸시는게 나을뜻하네요..

레이옷

unread,
Apr 13, 2006, 2:40:18 AM4/13/06
to kaug
ACE_Select_Reactor 나 ACE_TP_Reactor 모두 잘 동작했습니다.
제가 윈도우에서는 WFMO_Reactor 만 되는 걸로 착각하고
있었군요.

대신 성능은 그다지 좋지 않았습니다. 역시나 Proactor
방식으로 바꿔야 할 것 같군요. ㅠ_ㅠ

r2nato

unread,
Apr 17, 2006, 1:28:13 AM4/17/06
to kaug
TP_Reactor가 성능이 많이 안좋은가요?
Proactor는 OS에 다소 의존적인 것 같던데,
성능과 이식성 둘 중에 하나는 결국 포기해야할까요?
T.T

redpixel

unread,
Apr 17, 2006, 4:16:30 AM4/17/06
to kaug...@googlegroups.com
Proactor는 실질적으로 win32의 IOCP를 위한 프레임워크입니다. (aio는 성능이 아직은 많이 떨어지고 불안정해서...) 즉, 한번 코딩으로 어느 운영체계나 사용할 수있는 무적의 프레임워크는 현재로서는 존재하지 않다고 봐야죠. win32기반이라면 소규모라면 reactor, 대규모라면 proactor로 분리해서 코딩하셔야 할겁니다.

TP_Reactor는 단순한 입출력수준의 서버라면 괜찮은 성능을 나타냅니다(예:웹서버) 즉, 연결하나를 처리하는 중에 다른 연결의 처리를 방해하지 않는다면 말이죠. 게임서버나 채팅서버만 되어도 효율이 많이 떨어질수 있습니다만... 들은 바로는 공유메모리를 써서 실험을 해보면 나름대로 속도가 난다고도 들어보았습니다. (테스트는 해보지 못했습니다)

혹시나 win32 게임서버를 제작하신다면 proactor외에는 다른 방법이 없답니다. ^^

2006/4/17, r2nato <r2n...@gmail.com>:
--
Kwon Tai-in
Reply all
Reply to author
Forward
0 new messages