問題タブ [netmq]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - Xamarin での ZeroMQ の使用
サーバーとクライアントから構成されるアプリケーションがあります。
サーバーは C/C++ アプリケーションであり、クライアントは Windows、Android、および iOS を対象とするクロスプラットフォーム Xamarin アプリケーションです。
サーバー部分とクライアント部分は、ZeroMQ メッセージを使用して通信します。
NetMQ や clrzmq などの現在の c# 実装を試しましたが、Xamarin では使用できません。
Xamarin で ZeroMQ を使用する最も簡単な方法をご存知ですか?
asp.net-web-api - ZeroMQ / NetMQ: PushSocket.SendFrame が機能しない
NetMQ を使用して「ファイア アンド フォーゲット」タイプのメッセージを送信しようとしています。返事を待つ気にならない。これはロギング用であり、メッセージが確実に受信されたかどうかよりもパフォーマンスに関心があり、特に、ロギング サーバーがダウンした場合に Web アプリケーションがハングすることは望ましくありません。このクライアント コードは、重要な場合は Web API アプリケーションにあります。
Web API クライアントに次のコードがあります。
このコードは機能します。しかし、Thread.Sleep を省略すると、サーバーはメッセージを受信しません。これを行う正しい方法は何ですか?Thread.Sleep ではないと思います。
zeromq - NetMQ Req-Rep に「SendReady」が必要なのはなぜですか?
なんとか解決した問題があります...しかし、解決策が機能した理由がよくわからないので、少し心配です。
私は NetMQ を使用しています。具体的には、多数のソケットを持つ NetMQ ポーラーを使用しています。そのうちの 1 つは REQ-REP ペアです。
要求にデキューされる要求のキューがあり、サーバーは必要に応じて各要求タイプを処理し、適切な応答を返します。これは問題なく機能していましたが、追加のリクエスト タイプを追加しようとすると、システムが期待どおりに機能しなくなりました。何が起こるかというと、要求がサーバーに到達し、サーバーが応答を送信し、クライアントがそれを受信しないということです。サーバーがシャットダウンされるまで、メッセージはクライアントで受信されません (異常な動作です!)。
リクエストを送信する前に設定し、返信を受信するとリセットするフラグを使用して REQ-REP ペアを管理していました。REQソケットの「SendReady」イベント内でのみ応答をトリガーすることで問題を修正できました-これにより、すべての問題が自動的に修正されましたが、ソケットがそうでなかった理由を説明するドキュメントは実際には見つかりません「sendready」状態、またはこれが実際に行うこと。
これが現在機能している理由について流すことができる情報は素晴らしいでしょう:)
乾杯。
編集:ソース
クライアント:
「購読」は、UI への別のスレッドとして実行されます
サーバ:
c# - AsyncIO.ForceDotNet.Force() が Windows XP でメモリ リークを引き起こす
環境
- 運用中の OS: Windows XP SP3
- IDE: Microsoft Visual Studio 2013 アルティメット エディション
- 対象フレームワーク: .NET Framework 3.5
- NetMQ: 3.3.1
- 非同期IO: 0.1.18
- 言語: C#
Windows XP SP3 で単純な REQ REP ソケットを使用して NetMQ アプリケーションを実行する必要があります。問題 #412 から、Windows XP で実行する場合、AsyncIO.ForceDotNet.Force(); を呼び出す必要があることがわかりました。NetMQ を使用する前に。
アプリケーションの実行を開始してからしばらく (約 3 分間) すると、1 秒間に大量のメッセージ (5 ミリ秒あたり 1 メッセージまたは 1 秒あたり 12,000 メッセージ) を送信するため、~ の割合でメモリ リークが発生することがわかります。 3MB/秒 運用マシンには 1 GB の RAM しかなく、すぐにアプリケーションがクラッシュします。
以下のコードは、リークを非常によく再現しています。リークを確認するには、任意の Windows OS (7、8、または 10) で実行できます。Windows XP SP3 は必要ありません (ただし、AsyncIO.ForceDotNet.Force() がないと、Windows XP SP3 で NetMQ を実行できません)。
クライアント コード (アプリケーションを本番環境にデプロイするのを妨げる問題のあるコード)
対応するサーバー コード (同様にリーク)
c# - NetMQ マルチパート メッセージを使用してラージ オブジェクトを送信する際のパフォーマンスの問題
C# (NetMQ) で次のコードを使用してラージ オブジェクトを送信しています。
このコードは、高トラフィック (たとえば、1 秒あたり 10MB のメッセージ) で使用される場合、CPU 使用率の 90% を占めています。いくつかの調査の後、次の2つのコードを試しました。まず、最初のフレーム (「一括送信」) を削除しました。
驚いたことに、パフォーマンスが向上しました。次に、2 つのフレームを並べ替えます。大きなフレームを最初に移動することを意味します。次のように:
ここでも驚くべきことに、パフォーマンスが向上しました。
どうしたの?どうすればパフォーマンスを向上させることができますか? netmq で zproto を使用するのはどうですか? それに関する適切な文書はありますか?