메신져를 구현해보는 중인데 막히는부분이 있습니다..도와주세요~~
글쓴이: aesthetic / 작성시간: 일, 2007/02/18 - 2:09오후
네트워크프로그래밍을 공부하고자 리눅스에서 GTK를 기반으로 메신져를 구현해보고 있습니다.
서버와 클라이언트 간의 연결은 잘 됩니다. A와 B라는 클라이언트가 서버에 접속해있을 때 A클라이언트가 B클라이언트에게 대화요청을 하면 서버는 B클라이언트의 정보를 A에 넘겨주게 되고 A는 그 정보를 바탕으로 B클라이언트에게 접속요청을 하도록 하였습니다. 그런데 여기서 B클라이언트가 처리해야하는 부분이 문제입니다.. 언제 누가 접속요청을 할지 모르기때문에 소켓을 미리만들어두고 select로 감시하도록 해봤는데요.. select로 감시하는부분에서 계속 대기하게됩니다.. 이것때문에 B클라이언트는 UI도 멈추어있게되고 다른작업이 모두 정지되어있습니다.. 연결요청을 감시하기 위한 부분은 다른 프로세스를 만들어서 처리해야하는건가요? poll이나 epoll로도 해보았지만 역시 감시하느라 다른 작업을 처리하지않습니다..
이 부분을 어떤 알고리즘으로 구현해야하는건지 알려주시면 감사하겠습니다 :)
Forums:
폴링만 쓰실거면
폴링만 쓰실거면 폴링은 검사해야 만 알게 되니, 타이머를 돌려서 주기적으로 한번씩만 하셔야 합니다.
아니면, 검사 쓰레드를 만들어 통신에 관련된 layer를 별도로 두셔서 수신을 select로 항시 감시하고 있어도 되고요.
타이머를 어떻게 만드느냐, 쓰레드를 별도로 만들고 ui 와 어떻게 co-work 하게 하느냐는 또 다른 주제라..
GTK는 작업해 보지 않아.. 그넘 안에 도움될 api 가 있는지는 잘 모르겠네요. 답변이 하나두 없어 하나 작성해 봅니다. ^^;
부드럽게 돌아가도록
부드럽게 돌아가도록 만들고 싶다면 멀티스레드로 가는 것을 추천합니다.
한 스레드는 네트웍 통신전담
한 스레드는 UI 전담
한 스레드는 파일입출력 전담
....
머 이런식으로 가는거죠.
스레드 갯수는 님 마음대로고요.
그리고 X 연결 하나를 여러 스레드가 동시에 이용하지 않도록 관리 잘 해주셔야 합니다.
GTK도 X윈도우를 이용하는만큼 처음 초기화시에 X 연결 하나를 생성합니다.
Written By the Black Knight of Destruction
Written By the Black Knight of Destruction
댓글 달기