[질문] 서버 프로그래밍에서 다중 클라이언트들의 메세지 처리에
글쓴이: 익명 사용자 / 작성시간: 금, 2002/05/24 - 10:27오후
안녕하세요.
결국 질문하게 되는군요.
혼자 공부하는 상황에서.. 마땅한 답변을 찾을 수
있는 곳이 몇군데 되지 않는 현실이 안타깝습니다.
다름이 아니고, 제가 리눅스에서 GNU C를 이용하
여 socket을 이용한 채팅 프로그램을 구현해보고
자 하였습니다. 하지만, 여러가지 의문사항이 발
생되는군요. 특히 궁금해지는 것은, 서버에 접속
한 여러개의 클라이언트 소켓들에게서 전달되는
데이터들을 효율적으로 처리할 방법이 쉽게 떠오
르지 않습니다. 이것이 경험 부족이라는 것을 느
끼고 있는데요.
저의 짧은 지식으로는, select()를 사용한 블로
킹 방식으로 변화가 생길때마다 한번의 루틴을 실
행하여, 발생된 입력을 감지하여 처리하는 방식을
사용하고 있습니다.
하지만, 여러 클라이언트들에게서 동시 다발적인
메세지가 발생할 경우, 서버가 반복적인 루틴으로
인하여 과부하 또는 딜레이가 발생될 것으로 생
각이되는데요, 실전 프로그래밍에서는 이런 문제
점을 어떤 방식으로 해결하는지 궁금하더군요.
현재 저의 주변에는 블로킹을 이용하는 간단한 소
스밖에 없는 처지라서, 마땅히 분석할 만한 자료
도 없는 실정입니다. 부디, 자세한 설명으로 저의
궁금증을 명쾌히 풀어주실 선배님의 도움을 바라
겠습니다.
관심 가져 주셔서 감사합니다.
Forums:
Re: [질문] 서버 프로그래밍에서 다중 클라이언트들의 메세지 처
http//www.chonga.pe.kr/computer/linux/highperfsvr/
이곳도 참고해보세요.
Re^2: 감사합니다.
iron, 배성남 님.
많은 도움을 주셔서 감사합니다.
주말에 인터넷을 못해서 지금 보게 되었군요.
늘 행복하세요. ;)
Re: 여러가지 방법이 있을 수 있겠죠
여러가지 방법론이 있을 수 있겠죠;;
제가 님과 같은 고민을 할때 본 자료들입니다.
참고가 되었으면 하네요
The C10K problem
http//www.kegel.com/c10k.html
Scalable Network I/O in Linux
http//www.citi.umich.edu/techreports/reports/citi-tr-00-4.pdf
I/O Event Handling Under Linux
http//www.atnf.csiro.au/people/rgooch/linux/docs/io-events.html
Projects Linux scalability
http//www.citi.umich.edu/projects/linux-scalability/
ps.
제가 본 이상적인 서버솔류션은 엔티계열의
IOCP란 기술인데, 비동기적인 이벤트 발생과 이것을 처리하는
쓰레드 풀을 구성하는 것이 대략적인 요약입니다.
리눅스에선 엔티의 경우처럼 비동기와 쓰레드풀을
커널레벨에서는 지원하지 않고(제가 아는 지식에선)
select같은 멀티플랙싱과 직접 구현한 쓰레드 풀을
사용하는 방법이 있겠지요 ( 흐흐 시간이 흘러서
좀더 공부를 많이 한 다음에 리눅스에서 iocp같은
io모델을 만들어 보고 싶군요 ^^)
그리고 select나 poll을 사용하시면
그냥 예제처럼 사용하시는 것 보담은,
http//freshmeat.net/projects/libevent/?topic_id=809
이런식으로 랩핑을 해서 사용하시면 보다 효과적으로
사용하실수 있습니다.
마지막으로 한가지만 덧 붙이면,
ADAPTIVE Communication Environment (ACE)
http//www.cs.wustl.edu/~schmidt/ACE-overview.html
이런 공개소스 기반의 프레임 워크도 있으니깐
요것도 분석해보면 나름의 노하우가 생기지 않을까 싶네요;;
댓글 달기