문제

내가 있는 클라이언트와 서버 프로그램에는 이를 통해 통신 TCP.도를 사용하여 POSIX 메시지 큐를 대신(는 경우에는 클라이언트와 서버에 같은 기계,of course).나의 소망은 그것이 성능이 향상됩니다(특히을 통해 대기 시간을 줄여).

나는 일 그것의 대부분이지만,이에 대한 확실하지 않은을 설정하는 방법은"연결이 있습니다." 서버는 연결을 받는 여러 클라이언트에서 동시에 그래서 나는 유혹을 에뮬레이션 TCP 연결 설정 프로세스는 다음과 같이

  1. 서버가 열리 큐로 잘 알려진 이름과에서 읽고 그것을 지속적으로(사용할 수 있습니다 select(2) 와 같이 TCP).
  2. 클라이언트가 열 세 개의 큐:두 임의의 이름(일부를 포함하여 고유성과 같은 PID 를 충돌을 방지하고),및 중 하나로 잘 알려진 이름이 서버에서 사용됩니다.
  3. 클라이언트는 게시물"연결"메시지는 서버의 큐 포함하여 클라이언트의 큐 이름(중 하나는 지정된 클라이언트-서버 트래픽이고 다른 converse).
  4. 서버를 엽 큐 이름에서 클라이언트의 연결하는 메시지 읽기 시작하(선택)에서는 클라이언트-서버 하나입니다.
  5. 클라이언트가 닫히는 서버 큐로 잘 알려진 이름입니다.양방향 통신 수익금을 사용하여 두 개의 큐라는 이름으로 클라이언트(각 방향에 대해 하나씩).

아마 당신은 볼 수 있는 방법을 이 방식은 유사한 일반적인 TCP 방법,그리고 어떠한 사고입니다.그러나 알고 싶:

  1. 의 생각할 수 있는 더 나은 방법으로 할 수 있나요?
  2. 당신은 어떤 잠재적인 문제 방법?
  3. 당신은 다른 생각을 포함한 가능성에 대해 사용하는 메시지 큐를 대신 TCP 같은 컴퓨터에서 실제로 성능을 향상시킬(대기 시간)?

유지 하는 마음에 나는 사용하지 않은 POSIX 메시지 큐 전(나가 사용하는 IBM WebSphere MQ 잠시만,오히려 다른).이 플랫폼은 리눅스.

도움이 되었습니까?

해결책 2

나는 몇 가지 개선 사항으로 기본적으로 그것을 구현하게되었습니다.

  • 2 단계에서는 클라이언트의 PID를 통합하는 대신 대기열 이름에 대한 안내서를 사용했습니다.
  • 4 단계에서는 서버에서 클라이언트로 "수락"메시지를 보내는 것을 추가했습니다.
  • 양쪽이 의사 소통을 종료하기를 원할 때 "연결 해제"메시지를 보냅니다.

악수는 TCP보다 간단하지만 충분 해 보입니다.

대기 시간은 훨씬 좋습니다. 동일한 시스템에서 TCP 대신 POSIX 메시지 대기열을 사용하여 대략 75% 줄어 듭니다. 내 메시지는 각각 100 바이트 순서입니다.

다른 팁

  1. 의 생각할 수 있는 더 나은 방법으로 할 수 있나요?

    아마도 살펴 fifo(일명 라는 파이프).그들은 같은 네트워크 소켓 그러나 로컬 컴퓨터에 저장할 수 있습니다.그들은 uni-directional 그래서 당신은 수 있습을 만들 필요가 두 개의 각 방향에 대해 하나씩.당신의 질문에는 부족을 이유로 당신이 이렇게 변경합니다.아무 잘못 사용하여 소켓에 대한 프로세스하는 프로세스 커뮤니케이션.그들은 양지향성,효율적이고,광범위하게 지원을 제공 할 당신에게 자유를 별도의 프로세스 사이에 기계니다.

  2. 당신은 어떤 잠재적인 문제 방법?

    시스템 V 메시지 큐 및 fifo 명명된 파이프는 모두 절대적으로 괜찮습니다.Fifo 파이프가 같은 정기적인 파이프를 읽을 수 있도록()와 쓰기()최소한의 코드로 변경합니다.시스템 V 메시지 큐에 필요한 데이터를 넣으로 구조와 호출 msgsnd().어느 방법이 잘 될 것이다 그러나입니다.

  3. 당신은 다른 생각을 포함한 가능성에 대해 사용하는 메시지 큐를 대신 TCP 같은 컴퓨터에서 실제로 성능을 향상시킬(대기 시간)?

    내 다른 생각은 당신이 말한 대로,당신은 필요한 기술을 개발하도록 각 클라이언트는 독특한 식별자입니다.방법 중 하나는 것을 추가하는 pid 를 구조를 통해 전달 또는 협상하는 고유 id 를 부모/마스터 시작합니다.다른 것이 주는 혜택의 시스템 V 메시지 큐는 당신이 듣기에 대한"선택"메시지할 수 있도록 이상적으로 중 하나를 사용하는 큐에서 서버를 모든 클라이언트와 각 클라이언트를 기다리는 다른 메시지가 표시됩니다.

    나는에 대해 아무 생각이 없는 기술을 당신에게 가장 최적의 처리에서 소프트웨어입니다.그것은 정말 가치가 되지 않을 수도 있습니다 시스템을 사용하여 V 메시지 큐지만 만들 수 있습니다.

Philluminati

POSIX MQ의 성능과 한 쌍의 TCP/IP 소켓을 비교했습니다.

데모 프로그램에는 두 개의 스레드가 있으며, 다른 하나는 쓰기 용으로, 다른 하나는 읽기를위한 것입니다.

결과적으로 Posix MQ가 더 빠릅니다.

  • MQ 460000 TPS
  • SocketPair 400000 TPS

비슷한 문제를 충족했으며 실시간 응용 프로그램을 개발하고 소켓 기능 및 최소한의 대기 시간과 유사한 IPC 기술이 필요합니다.

POSIX-MQ 기반 솔루션을 UNIX 로컬 소켓 또는 TCP 소켓 만 비교 했습니까?

감사

Select ()가 메시지 대기열에서 작동하지 않으면 어떻게 했습니까? SYS V 또는 POSIX 뭐야? PID가 독특하고 더 작은 저장 공간 (정수) 일 때 Guid to PID 조회 테이블을 만드는 데 추가 노력을 기울이는 이유는 무엇입니까?

/BLEE/

다른 기계에 상주하는 프로그램에서 IPC 용 메시지 대기열을 사용할 수도 있으므로 ZeromQ를 사용할 수 있습니다.http://www.zeromq.org) 또는 다른 메시지 대기열 API, 나는 또한 그것들을 고려하고 테스트하는 것이 좋습니다.

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