2013-06-01 10 views
0

클라이언트로부터의 선택 요청을 통해 수용하는 서버가 C 언어로되어 있습니다. 클라이언트에서 요청한 작업을 처리 할 수있는 스레드를 만듭니다. 이 시점까지 나는 괜찮다. 하지만 지금은 내부 소켓을 갖고 싶기 때문에 생성 된 쓰레드는 메인 쓰레드와 통신하여이를 통해 응답을 보냅니다. 모든 아이디어를 어떻게 해결할 수 있을까요?tcp와 함께 내부 소켓 및 외부 소켓

답변

1

꽤 쉽습니다. 이 용도로 사용하려는 것은 socketpair(2)입니다. 각 스레드에 대해 한 쌍을 작성하면 완료됩니다.

0

@Guillaume이 맞습니다. 그러나 왜 모든 복잡한 과정을 겪어야하는지.

소켓을 통해 통신하는 하나의 프로그램에있는 모든 스레드와 함께 실행되는 서버가 있고 때때로 일반 소켓을 통해 통신하는 '작업자 스레드 서버'가있는 다른 컴퓨터에서 실행되는 서버를 사용하려는 경우에만이 작업을 수행합니다.

이처럼 이국적인 것을 필요로하지 않는 한, 공유 메모리 블록 (적절하게 뮤텍스로 보호 됨)으로 스레드간에 통신 할 수 있습니다. 예 : 작업 객체를 발송자 스레드에서 작업자 스레드로 전달합니다. 또한 스레드 간의 통신을 위해 데이터 직렬화 및 직렬화 해제의 복잡성을 잊어 버리십시오.

+0

공유 메모리가 더 쉬운 아이디어라는 것을 알고 있지만, 불행하게도 저는이 같은 "이국적인"방식으로 작동하도록하고 싶습니다. 그래서 기ume의 방법으로 길을 찾으려고 노력할 것입니다. 고마워 btw 많이. – harry77

+0

다릅니다. 작업 디스패치 메커니즘이 이미 소켓에 구축 된 경우 소켓을 사용하는 것이 훨씬 쉽습니다. 공유 메모리 대기열을 전환하는 경우 한 통화에서 소켓을 폴링하고 다른 대기열에서 대기열을 폴링해야합니다. 소켓을 사용하여 알림을 수행 할 수 있지만 (1 바이트 쓰기) 공유 메모리를 통해 실제 통신을 수행 할 수 있습니다. 교환되는 물건의 양에 따라 좋은 거래가 될 수 있습니다. – Guillaume