소켓으로 받은 데이터를 메시지 큐를 이용해서 보낸후 병렬적으로 처리하려고 합니다.
현재 상황은 이렇습니다.
Unix이며 Solaris 8을 사용하고 있습니다.
기본적으로 소켓 통신을 하는 클라이언트(C)와 서버(S)가 있고
S는 C로부터 받은 데이터를 메시지 큐를 이용해서
이를 처리하는 함수로 보냅니다.
함수는 이를 처리하여 기존의 소켓을 끊고 자신이 다시 C가 되어 S에게 데이터를 전송하구요..
그리고 보낸 데이터에 대한 답변을 기다리고 보내고 하는 식으로 Flow가 진행됩니다.
위의 사항처럼 단일 메시지인 경우에는 잘 진행됩니다.
제가 하고싶은건...
클라이언트에서 서버로 동시에 여러개의 메시지를 보낼 경우에 이를 처리하게끔 upgrade하고 싶습니다.
예를 들어 클라이언트에서 서버로 2개의 메시지를 동시에 보내면...
서버는 이를 받아서 메시지 큐로 보냅니다.
그러면 이를 처리하는 함수가 1개의 메시지를 꺼내서 처리하고 클라이언트 입장으로 다시 서버에 접속하여
메시지를 보내고 응답 메시지를 기다리고 있습니다.
즉 현상태에서는 1개의 메시지가 처리중이고 메시지큐에 2번째 메시지가 대기중인 상태에 있구요...
하나의 메시지가 끝나지 않은 시점에서 다른것도 병렬적으로 처리하고 싶은데 이를 어떻게 구현하면 될까요...
게시판을 검색해도 질의어를 멀 넣어야 할지...
포괄적으로 검색하니 너무 방대한 자료에 힘이 드네요...
fork나 쓰레드를 사용한다면 메시지 큐를 어떻게 읽어와야 동시에 처리가 가능할지...
fork와 쓰레드를 공부하기엔 시간이 녹록치 않아
고수님들의 조언을 부탁드립니다.
주말에 수고하시는 분들 모두 화팅 하시구 존 주말 보내세요~
질문이 좀 더 구체적으로 되야 할 것 같습니다.
클라이언트에서 서버를 향해 2개의 메세지를 보낸다 함은 더 정확히는 무슨 뜻이죠?
1) 두 개의 클라이언트 프로세스가 띄어져서 각각 1개의 메세지를 보낸다는 건가요?
2) 아니면 한 개의 클라이언트가 2개의 서로다른 컨텐츠 영역에 속하는 메세지를 각 영역별로 1개씩 보낸다는 건가요?
1)의 경우에는 이미 서버 프로세스는 각 채널별로 fork(혹은 스레드가) 생성되어 처리되니..시스템 영역에서 이미
병력 처리되고 잇는것이죠
2)의 경우라면 이미 그건 데이터 내용까지 까본다음에야 구별할 수 있다는 얘기이니.. 의미가 없는 논의이겠죠?
즉, 일반적인 tcp/ip 통신에서는 구별할 수 없는 내용이랍니다.
ls -al 'happy' | grep 'possible'
A few Good Man
댓글 달기