簡體   English   中英

如何使用NetMQ從服務器向客戶端發送ACK消息

[英]How to send ACK message to client from server using NetMQ

我正在使用NetMQ將消息從許多客戶端發送到服務器,該服務器接收消息並進行處理。 如果使用pub / sub模式,則可以(ab)使用訂戶套接字並將其用於服務器,客戶端將成為發布者(相反的流程,不是嗎?)。 但是,我無法向客戶端發送確認消息。

如果使用REQ/RESP模式,則可以將響應套接字用於服務器,甚至可以發送確認消息,客戶端可以接收該消息。 但是,如果服務器錯過了來自客戶端的消息,我將無法重新發送消息(在等待timespan ),因為我收到了異常

Req.XSend-無法發送其他請求

-即使斷開了客戶端套接字的連接並關閉了它(它也表明服務器套接字跟蹤了它)。

最后,根據文檔,我不確定是否使用Dealer/Router是正確的模式。 因為我很確定自己陷入了非常普遍的情況,是否有使用NetMQ實施此方案的模式?

您陷入了一個非常常見的問題,通常在0MQ中稱為“可靠的請求-答復”。

指南中描述了幾種方法,第一種是“懶惰的海盜”。 在其中,您可以按所述使用REQ / RESP套接字對(盡管REQ / ROUTER同樣有效,並且可能對多個客戶端來說更好)。 解決方案是,如果您的ACK超時,則丟棄該套接字並創建一個新套接字。

該指南的確指出,用經銷商代替REQ可以解決問題,但是需要自己跟蹤信封。 除非出於某些其他原因需要在客戶端進行異步發送/接收,否則我會遵循他們的建議並堅持使用REQ / ROUTER。

可以在GitHub上找到此模式的示例實現: https : //github.com/NetMQ/Samples/tree/master/src/Pirate%20Pattern

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM