2013-02-01 3 views
2

다른 컴퓨터의 여러 프로세스에서 데이터를 수신하는 ZeroMQ 소켓이 있습니다. 데이터 내용을 변경하지 않고 데이터 원본을 식별 할 수있는 방법이 있습니까? 특히, TCP 연결에서 온 경우 보낸 사람의 IP 주소를 원합니다.ZeroMQ 메시지의 출처를 알 수있는 방법이 있습니까?

답변

4

아니요, ZeroMq 소켓에서 발신자 IP를 가져올 방법이 없습니다. 이 정보는 ZeroMq 구현 레이어 내에 숨겨져 있습니다. 이 문제를 해결할 수있는 몇 가지 선택 사항이 있습니다. 하나는 전달되는 메시지를 변경하고 단순히 메시지 자체에 보낸 사람 IP를 추가하는 것이고 다른 하나는 다중 부분 메시지를 사용하는 것입니다.

ØMQ 메시지는 하나 개 이상의 메시지 부분으로 구성되어 다음 ZeroMq zmq_send() API 문서 (3.2.2)에서

. 각 메시지 부분은 독자적인 zmq_msg_t입니다. ØMQ는 메시지의 원자 전달을 보장합니다. 동료는 메시지의 모든 메시지 부분을 수신하거나 전혀 수신하지 않습니다. 메시지 부분의 총 수는 사용 가능한 메모리를 제외하고는 무제한입니다.

멀티 파트 메시지는 실제로 원자 메시지이지만 여러 논리 메시지로 구분됩니다. 나는. 모든 부품 또는 부품이 제공됩니다. 원본 메시지를 수정할 수없는 경우 발신자 측의 IP에 발신자의 IP를 추가 할 수 있습니다. 그러면 수신자는 첫 번째 부분을 보낸 사람 IP로 추출하고 두 번째 부분은 원래의 수정되지 않은 메시지로 추출 할 수 있습니다. 단일 메시지로 전달되지만 논리적으로 두 개의 분리 된 부분으로 분리됩니다. 수신기를 들어

// Send a multi-part message consisting of sender IP plus another message 
zmq_msg_send (&my_ip, my_socket, ZMQ_SNDMORE); 
zmq_msg_send (&my_message, my_socket, 0); 

zmq_msg_recv()의 설명서를 참조하십시오 : 귀하의 경우에는

, 당신이 뭔가를 할 수 있습니다.

+0

ZMQ가 메시지를 보내는 데 사용하는 IP 주소를 로컬에서 어떻게 결정합니까? – xSNRG

+0

글쎄, 보통 당신이 선택한 끝점에 소켓을 묶는다. 이 엔드 포인트 (ip + port)는 zmq가 메시지를 보내는 데 사용합니다. –

관련 문제