2016-06-07 30 views
1

我想用NetMQ發送「即發即丟」類型的消息。我不在乎等待迴應。這是用於日誌記錄的,我更關心性能而不是確定收到我的消息,而且如果日誌記錄服務器關閉,我尤其不希望我的Web應用程序掛起。這個客戶端代碼在web api應用程序中,如果這很重要的話。ZeroMQ/NetMQ:PushSocket.SendFrame不能正常工作

我有我的web API客戶端上下面的代碼:

using (var client = new PushSocket(">tcp://localhost:9001")) 
{ 
    client.SendFrame("hello!"); 
    System.Threading.Thread.Sleep(10); 
} 

此代碼的工作。但是如果我忽略Thread.Sleep,服務器永遠不會收到消息。什麼是正確的方法來做到這一點?我假設它不是Thread.Sleep。

回答

0

ZeroMQ(和我認爲NetMQ)的'發送'調用是異步的,它們在底層網絡層發送消息之前返回。 當最後一個'}'到達時,您的套接字被銷燬,任何尚未發送的消息都將丟失。睡眠可以阻止套接字被銷燬足夠長的時間以允許發送消息。

理想情況下,您想要在某處構建一個套接字並重復使用它,這將會更快並且避免需要進行睡眠。

雖然沒有c#專家,所以你怎麼做,這是我不知道的。

0

沒有Tread.sleep,你的套接字在它被髮送之前會被銷燬。根據應用程序的其他部分,可以考慮通過將套接字用作特定於對象的套接字來使套接字保持活動狀態。

public class foo 
{ 
    PushSocket client; 
    public foo() 
    { 
     client = = new PushSocket(">tcp://localhost:9001); 
     client.SendFrame("hello!"); 
    } 
} 

只要此foo實例保持活動狀態,套接字就不會被銷燬。 這樣你的信息將被收到