我有一個ZeroMQ套接字,它接收來自不同機器上多個進程的數據。在不更改數據內容的情況下,是否有任何方法可以確定數據的來源?具體來說,如果它來自TCP連接,我希望發件人的IP地址。有什麼方法可以告訴ZeroMQ消息來自哪裏?
2
A
回答
4
不,沒有辦法從ZeroMq套接字獲取發件人IP。這些信息隱藏在ZeroMq的實現層中。你有幾個選擇來解決這個問題,一個是改變正在傳遞的消息並簡單地將發送者IP添加到消息本身,另一個是使用多部分消息。
從ZeroMq zmq_send() API文檔(3.2.2):
甲ØMQ消息由1個或多個消息部分。每個消息部分都是獨立的zmq_msg_t。 ØMQ確保消息的原子交付:同伴應接收消息的所有消息部分或根本不接收消息。除可用內存以外,消息部分的總數不受限制。
多部分消息實際上是原子消息,但分成幾個邏輯消息。即你收到所有零件或沒有零件。如果您無法修改原始郵件,則可以在發件人的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()。
相關問題
- 1. 有什麼好方法可以查看變量來自哪裏?
- 2. 有什麼辦法可以告訴哪個屬性的值來自?
- 3. Can Hudson-CI可以告訴ShellCommands構建請求來自哪裏?
- 4. 告訴showEvent從哪裏來
- 5. 所有這些消息來自哪裏?
- 6. 有什麼方法可以告訴哪些PouchDB插件當前已加載?
- 7. 有什麼方法可以告訴SVG動畫何時完成?
- 8. 在哪裏可以看到來自RAISE_APPLICATION_ERROR的錯誤消息?
- 9. applescript可以告訴應用程序哪個消息?
- 10. 有什麼辦法可以告訴哪些短信是另一條消息的迴應?
- 11. 任何人都可以告訴我這個ZeroMQ代碼有什麼問題嗎?
- 12. 我的消息來自哪裏?
- 13. 此錯誤消息來自哪裏?
- 14. 此錯誤消息來自哪裏?
- 15. 驗證消息來自哪裏?
- 16. 有什麼辦法可以告訴是什麼原因將-drawRect:消息發送給NSView?
- 17. 有人可以告訴我它從哪裏採摘圖像?
- 18. 來自哪裏的方法?
- 19. 哪裏可以定義錯誤消息
- 20. 有沒有什麼方法可以確定ExternalInterface.call來自哪個電影?
- 21. 請告訴我這個silverlight警告消息是什麼意思
- 22. 有人能告訴我數字在哪裏消失嗎?
- 23. 自定義Zurb基金會Flash消息。有人可以告訴我我做錯了什麼
- 24. 有什麼方法可以自定義Active Directories異常/錯誤消息嗎?
- 25. 有什麼方法可以告訴MySQL查詢需要運行多久?
- 26. 有什麼方法可以確定給定的GraphDataItem來自哪個系列?
- 27. 有什麼方法可以檢測哪些硬件輸入來自web編程?
- 28. 有人可以告訴我我可能會做錯什麼
- 29. 告訴聖人在哪裏可以找到libjpeg
- 30. 如何告訴StackTrace在哪裏可以找到它的PDB?
如何在本地確定ZMQ用來發送消息的IP地址? – xSNRG
那麼,你通常將套接字綁定到你選擇的端點。該端點(ip +端口)是zmq用來發送消息的內容。 –