1

NetMQ を使用して「ファイア アンド フォーゲット」タイプのメッセージを送信しようとしています。返事を待つ気にならない。これはロギング用であり、メッセージが確実に受信されたかどうかよりもパフォーマンスに関心があり、特に、ロギング サーバーがダウンした場合に Web アプリケーションがハングすることは望ましくありません。このクライアント コードは、重要な場合は Web API アプリケーションにあります。

Web API クライアントに次のコードがあります。

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

このコードは機能します。しかし、Thread.Sleep を省略すると、サーバーはメッセージを受信しません。これを行う正しい方法は何ですか?Thread.Sleep ではないと思います。

4

2 に答える 2

0

ZeroMQ (および私は NetMQ を想定しています) の「送信」呼び出しは非同期であり、メッセージが基になるネットワーク層で送信される前に返されます。最後の '}' に到達すると、ソケットが破棄され、まだ送信されていないメッセージはすべて失われます。スリープは、メッセージの送信を許可するのに十分な時間、ソケットが破棄されるのを防ぎます。

理想的には、単一のソケットをどこかに構築し、それを繰り返し使用することで、より高速になり、スリープの必要性を回避したいと考えています。

ただし、私はC#の専門家ではないので、どのようにそれを行うかは私にはわかりません。

于 2016-06-07T16:34:26.263 に答える