문제

나는 전에 Linux에 IPC C ++를 작성한 적이 없습니다.

내 문제는 여러 클라이언트 (작가)와 단일 서버 (리더)가 있다는 것입니다. 이 모든 것이 같은 기계에있을 것입니다. 작가는 독자에게 데이터 청크 (문자열/구조물)를 전달할 것입니다. 그런 다음 독자는 FIFO에서 읽고 그들과 함께 무언가를 할 것입니다.

Linux의 IPC 유형은 내가 알 수있는 한 파이프 또는 소켓/메시지 큐입니다.

나는 누군가가 나에게 내려갈 길을 추천 할 수 있는지 궁금했다. 나는 소켓에 기대고 있지만, 나는 그것에 대한 진정한 근거가 없습니다. 이 여정을 시작하기 전에 읽고 이해해야 할 것이 있습니까?

감사

도움이 되었습니까?

해결책

당신이 고려해야 할 주요 문제는 당신이 전달하는 데이터의 종류가 부분적으로 당신의 옵션을 결정할 것입니다. 이것은 귀하의 데이터가 제한되어 있는지 여부에 달려 있습니다. 그것이 경계가 없다면 FIFOS 나 소켓과 같은 스트림이 적절합니다. 그렇다면 MQS 또는 공유 메모리와 같은 것들을 더 잘 활용할 수 있습니다. 문자열과 구획을 모두 언급하기 때문에, 당신의 경우에 적합한 것이 무엇인지 말하기는 어렵지만, 문자열이 합리적인 최대 값 내에 묶여 있으면 약간의 희미한 피들링으로 무엇이든 사용할 수 있습니다.

두 번째는 속도입니다. 이것에 대한 완전히 정당한 답은 없지만 일반적으로 공유 메모리, MQS, FIFOS, 도메인 소켓, 네트워크 소켓과 같은 것입니다.

세 번째는 사용 편의성입니다. 공유 메모리는 자신의 동기화를 처리해야하기 때문에 가장 큰 피타입니다. 메시지 길이가 Pipe_Buf 크기 아래로 유지되는 한 파이프는 쉽습니다. OS는 대부분의 두통을 MQ로 처리합니다. 소켓은 충분히 쉽지만 설정 보일러 플레이트가 있습니다.

마지막으로 여러 IPC 메커니즘에는 POSIX 및 SYSV 변형이 모두 있습니다. 일반적으로 POSIX는 SYSV 유형에 실제로 필요한 기능이 있거나 원하는 기능이 없다면 갈 길입니다.

편집 : Count0의 답변은 더 추상적이고 높은 수준에 관심이있을 수 있음을 상기시켜주었습니다. 에이스 외에도 볼 수 있습니다 포코. 물론, 언급하지 않으면 답이 완료되지 않습니다. 후원 어딘가에.

다른 팁

System v IPC는 사용하기가 다소 어렵지만 성숙하고 강력한 기술입니다. 메시지 대기열은 아마도 당신이 원하는 것을 수행하고 원자 큐잉/탈신을 지원할 것입니다.

소켓은 사용하기 쉽고 네트워크를 통한 통신을 지원합니다. 그러나 큐잉을 수행하지 않으므로 서버 내에 큐 관리 코드를 작성해야합니다. C ++와 함께 소켓을 사용하는 것은 C와 함께 사용하는 것과 크게 다르지 않습니다. 그물에는이 주제를 다루는 Stevens ''Unix Network Programming (Vol 1)과 같은 책에 대한 가이드가 많이 있습니다.

발을 젖게하기에 좋은 곳은 이것입니다. 소켓 튜토리얼.

그러면 뼈를 켜야합니다 스레드 및 뮤 테스 그리고 여기.

위의 위에 당신은 모두 재생을 시작하도록 설정했습니다 ;-)

당신은 책을 요청하지 않았지만 위의 답변이 너무 좋기 때문에이 두 주제의 사본을 손에 넣는 것이 좋습니다.

UNIX 네트워크 프로그래밍, 볼륨 2, 제 2 판 : Intercrocess Communications, W. Richard Stevens

Unix 환경의 고급 프로그래밍, 제 2 판, W. Richard Stevens 및 Stephen A. Rago

이런 종류의 코딩에는 불가피한 ins 및 아웃이 있습니다.이 두 권의 책은 당신이 겪는 혼란을 겪는 데 도움이 될 것입니다.

살펴보십시오 에이스 (적응 적 통신 환경). ACE 라이브러리는 무료이며 매우 성숙하고 크로스 플랫폼입니다. 불행히도 좋은 문서는 아닙니다. 이 책 좋은 해결책을 찾으려면. 당신은 살펴 보려고 노력할 수 있습니다 이 튜토리얼 패턴의 느낌을 얻기 위해 (문서의 끝에서). ACE는 많은 패턴을 사용하여 특히 네트워크가있는 컨텍스트에서 이러한 문제를 매우 성공적이고 효율적으로 다루므로 좋은 패턴과 사용 방법을위한 범위가 좋은 시작이어야합니다.

특히 ACE_TASK 사용 message_queue 필요한 일을 허용하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top