사용 POSIX 메시지 큐를 대신 TCP 소켓을 설정하는 방법"연결"?
-
03-07-2019 - |
문제
내가 있는 클라이언트와 서버 프로그램에는 이를 통해 통신 TCP.도를 사용하여 POSIX 메시지 큐를 대신(는 경우에는 클라이언트와 서버에 같은 기계,of course).나의 소망은 그것이 성능이 향상됩니다(특히을 통해 대기 시간을 줄여).
나는 일 그것의 대부분이지만,이에 대한 확실하지 않은을 설정하는 방법은"연결이 있습니다." 서버는 연결을 받는 여러 클라이언트에서 동시에 그래서 나는 유혹을 에뮬레이션 TCP 연결 설정 프로세스는 다음과 같이
- 서버가 열리 큐로 잘 알려진 이름과에서 읽고 그것을 지속적으로(사용할 수 있습니다
select(2)
와 같이 TCP). - 클라이언트가 열 세 개의 큐:두 임의의 이름(일부를 포함하여 고유성과 같은 PID 를 충돌을 방지하고),및 중 하나로 잘 알려진 이름이 서버에서 사용됩니다.
- 클라이언트는 게시물"연결"메시지는 서버의 큐 포함하여 클라이언트의 큐 이름(중 하나는 지정된 클라이언트-서버 트래픽이고 다른 converse).
- 서버를 엽 큐 이름에서 클라이언트의 연결하는 메시지 읽기 시작하(선택)에서는 클라이언트-서버 하나입니다.
- 클라이언트가 닫히는 서버 큐로 잘 알려진 이름입니다.양방향 통신 수익금을 사용하여 두 개의 큐라는 이름으로 클라이언트(각 방향에 대해 하나씩).
아마 당신은 볼 수 있는 방법을 이 방식은 유사한 일반적인 TCP 방법,그리고 어떠한 사고입니다.그러나 알고 싶:
- 의 생각할 수 있는 더 나은 방법으로 할 수 있나요?
- 당신은 어떤 잠재적인 문제 방법?
- 당신은 다른 생각을 포함한 가능성에 대해 사용하는 메시지 큐를 대신 TCP 같은 컴퓨터에서 실제로 성능을 향상시킬(대기 시간)?
유지 하는 마음에 나는 사용하지 않은 POSIX 메시지 큐 전(나가 사용하는 IBM WebSphere MQ 잠시만,오히려 다른).이 플랫폼은 리눅스.
해결책 2
나는 몇 가지 개선 사항으로 기본적으로 그것을 구현하게되었습니다.
- 2 단계에서는 클라이언트의 PID를 통합하는 대신 대기열 이름에 대한 안내서를 사용했습니다.
- 4 단계에서는 서버에서 클라이언트로 "수락"메시지를 보내는 것을 추가했습니다.
- 양쪽이 의사 소통을 종료하기를 원할 때 "연결 해제"메시지를 보냅니다.
악수는 TCP보다 간단하지만 충분 해 보입니다.
대기 시간은 훨씬 좋습니다. 동일한 시스템에서 TCP 대신 POSIX 메시지 대기열을 사용하여 대략 75% 줄어 듭니다. 내 메시지는 각각 100 바이트 순서입니다.
다른 팁
의 생각할 수 있는 더 나은 방법으로 할 수 있나요?
아마도 살펴 fifo(일명 라는 파이프).그들은 같은 네트워크 소켓 그러나 로컬 컴퓨터에 저장할 수 있습니다.그들은 uni-directional 그래서 당신은 수 있습을 만들 필요가 두 개의 각 방향에 대해 하나씩.당신의 질문에는 부족을 이유로 유 당신이 이렇게 변경합니다.아무 잘못 사용하여 소켓에 대한 프로세스하는 프로세스 커뮤니케이션.그들은 양지향성,효율적이고,광범위하게 지원을 제공 할 당신에게 자유를 별도의 프로세스 사이에 기계니다.
당신은 어떤 잠재적인 문제 방법?
시스템 V 메시지 큐 및 fifo 명명된 파이프는 모두 절대적으로 괜찮습니다.Fifo 파이프가 같은 정기적인 파이프를 읽을 수 있도록()와 쓰기()최소한의 코드로 변경합니다.시스템 V 메시지 큐에 필요한 데이터를 넣으로 구조와 호출 msgsnd().어느 방법이 잘 될 것이다 그러나입니다.
당신은 다른 생각을 포함한 가능성에 대해 사용하는 메시지 큐를 대신 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, 나는 또한 그것들을 고려하고 테스트하는 것이 좋습니다.