問題タブ [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# - NetMQ 受信で IObservable
netmq から株式ティッカー/注文/取引を受け取り、ストリームを IObservable に変換し、WPF フロントエンドに表示する典型的な株式取引プログラムを作成しようとしています。ReceiveString ループがメイン (UI) スレッドをブロックしないように、NetMQ ブロッキング ReceiveString で async/await を使用しようとしました (文字列入力を期待しているとします)。私はまだ C# に慣れていないので、この投稿で Dave Sexton の回答を取り上げます: ( https://social.msdn.microsoft.com/Forums/en-US/b0cf96b0-d23e-4461-9d2b-ca989be678dc/where -is-iasyncenumerable-in-the-lastest-release?forum=rx ) そして、次のようないくつかの例を書き込もうとしています:
「cannot await string」でコンパイルに失敗します。タスクを期待している可能性があることは理解していますが、全体を起動する方法がよくわかりません。
もう一度ラップします: 私が達成しようとしているのは、単純なブロック API を使用して netmq からティッカー/注文/取引の IObservable ストリームを取得することですが、メイン スレッドを実際にブロックすることはありません。
私にできることはありますか?どうもありがとう。
java - ZeroMQ: メッセージが消える
サーバーとして機能するJavaアプリケーションがあります。クライアント アプリケーション (C# で記述) は、ZeroMQ を使用して通信しています。私たちは (ほとんど) Lazy Pirate パターンに従っています。
サーバーには、次のように実装されたルーター ソケットがあります (JeroMQ を使用)。
クライアントは次のように接続してメッセージを送信します。
複数のクライアントが同時にメッセージを送信すると、メッセージが失われるという経験がありました。単一のクライアントでは、問題はないようです。
これは、複数のクライアントと単一のサーバーのセットアップに対して正しい方法で実装されていますか?
更新: この動作を示すクライアントとサーバーの例:
サーバ:
クライアント:
サーバーと 1 つのクライアントを実行すると、100 件のメッセージがすべて到着することがわかります。たとえば、5 つのクライアントを同時に実行すると、500 通のメッセージではなく、約 200 -> 300 のメッセージしか到着しません。これは単なる理論ですが、メッセージを簡単に受信します。
c# - マルチスレッド ポーラー キャンセルを使用した ZeroMQ PUB/SUB パターン
C++ サーバーと C# WPF UI の 2 つのアプリケーションがあります。C++ コードは、ZeroMQ メッセージング [PUB/SUB] サービスを介して (どこからでも誰からでも) 要求を受け取ります。私は自分の C# コードをバック テストに使用し、「バック テスト」を作成して実行しています。これらのバック テストは、多くの「単体テスト」で構成でき、それぞれが C++ サーバーから何千ものメッセージを送受信します。
現在、個々のバック テストはうまく機能しており、それぞれ数千のリクエストとキャプチャを含む N 個の単体テストを送信できます。私の問題は建築です。別のバック テスト (最初のテストに続いて) をディスパッチすると、ポーリング スレッドがキャンセルおよび破棄されないために、イベント サブスクリプションが 2 回行われるという問題が発生します。これにより、誤った出力が発生します。これは些細な問題のように思えるかもしれませんが (一部の人にとってはそうかもしれません)、現在の構成でこのポーリング タスクをキャンセルするのは面倒です。いくつかのコード...
私のメッセージブローカークラスはシンプルで、次のようになります
バックテストの「エンジン」は、各バック テストを実行するために使用します。最初に、各テスト (ユニット テスト)Dictionary
を含むと、各テストの C++ アプリケーションにディスパッチするメッセージを作成します。Test
DispatchTests
方法は、こちら
最後のPING
メッセージは、終了したことを C++ に伝えるためのものです。次に、強制的に待機させて、C++ コードからすべての戻り値を受け取る前に次の [ユニット] テストがディスパッチされないようにしますManualResetEvent
。
C++ が PING メッセージを受信すると、メッセージをそのまま送り返します。受信したメッセージを 経由で処理し、ユニット テストを続行できるようにOnMessageRecieved
を設定するように PING から指示されます。ManualResetEvent.Set()
"次の方"...
私の問題は。broker.Dispose()
、最後に上記がヒットしないことです。バックグラウンド スレッドで実行される finally ブロックが実行されるとは限りません
上記の取り消し線のテキストは、私がコードをいじったためです。子が完了する前に親スレッドを停止していました。ただし、まだ問題があります...
Nowbroker.Dispose()
が正しく呼び出され、呼び出されます。このメソッドでは、複数のサブスクリプションを回避するためbroker.Dispose()
に、ポーラー スレッドをキャンセルし、正しく破棄しようとします。Task
スレッドをキャンセルするには、CancelPolling()
メソッドを使用します
しかし、StartPolling()
方法では
ThrowIfCancellationRequested()
が呼び出されることはなく、スレッドがキャンセルされることもないため、適切に破棄されることはありません。ポーラー スレッドがsubSocket.Receive()
メソッドによってブロックされています。
今、私が望むものを達成する方法が明確ではありません。メッセージをポーリングするために使用されるスレッド以外のスレッドでbroker.Dispose()
/を呼び出す必要があり、キャンセルを強制する方法もあります。PollerCancel()
スレッドの中止は、私がどうしてもやりたいことではありません。
基本的に、次のバック テストを実行する前に適切に破棄したいのですが、broker
これを正しく処理し、ポーリングを分割して別のアプリケーション ドメインで実行するにはどうすればよいですか?
ハンドラー内で破棄しようとしOnMessageRecived
ましたが、これは明らかにポーラーと同じスレッドで実行され、追加のスレッドを呼び出さずにブロックする方法ではありません。
私が望むものを達成するための最良の方法は何ですか?私が従うことができるこの種のケースのパターンはありますか?
御時間ありがとうございます。
zeromq - ZeroMQ 受信者を選択
私は ZeroMQ (およびネットワーク全般) に不慣れで、複数のクライアントが単一のサーバーに接続するセットアップで ZeroMQ を使用することについて質問があります。私の状況は次のとおりです。
--1 サーバー
--複数のクライアント
-- クライアントがサーバーにメッセージを送信する: この部分の実行方法は既に把握しています。
-- サーバーが特定のクライアントにメッセージを送信する: これは私が問題を抱えている部分です。特定のイベントがサーバーで処理されると、サーバーはすべてのクライアントではなく、特定のクライアントにメッセージを送信する必要があります。つまり、サーバーは、特定のメッセージを送信するクライアントを選択できる必要があります。
現在、これは私のサーバーコードです:
問題は私のデザインが間違っていることであり、ResponseSocket
タイプが私が使いたい方法で使用されることを意図していないことにあると感じています。初心者なのでアドバイスいただけると助かります!
mvvm-light - Eventbus と MessageQueue のどちらがアルゴリズム取引シナリオで市場データをブロードキャストするのに適していますか?
リアルタイムの市場データを取引戦略にブロードキャストするために使用する技術を決定しようとしています。シナリオは次のとおりです。
特定のティッカーの市場データが受信されると、このティッカーの市場データをストラテジーにブロードキャストします。リスニング取引戦略は、受信した市場データに基づいて行動します。
私は2種類の実装を念頭に置いています。
Messenger
1)によって提供されるクラスのようなイベント バスを使用することですmvvmlight
。
ZeroMQ
2) もう 1 つの方法は、 ( NetMQ
)などのメッセージ キュー システムを使用することです。
市場データ API と取引戦略の両方が同じマシン上にあるため、ネットワークが関与していないことに注意してください。
私のケースにはどちらがより適していますか?
zeromq - NetMQ/ZeroMQ を使用して最後のメッセージのみをサーバーに送信する方法は?
クライアントからサーバーにデータを送信したい。サーバーにとって重要なのは最後のメッセージだけです。サーバーが障害の後に起動した場合、サーバーがクライアントから最後のメッセージを取得するだけにしたい。
サーバーがダウンしている間、クライアントが処理を続けてメッセージを送信するか、少なくともそれらをキューに入れます(1つのメッセージの長さで)。
これには NetMQ/ZeroMQ を使用しようとしています。どうすればそれができますか?
ありがとう!
sockets - netmq (zeromq) でのプッシュ/プル ソケットの予期しない動作
netmq (zeroMQ のポート) を使用しようとしています。これが私が見つけた問題です。コードは次のとおりです。
このコードを実行してコンソールで見ると、いくつかのメッセージが失われていることがわかりました。お気に入り:
4211d77a-ad9f-40f1-9382-121156325128
からのメッセージがどこにないかがわかりますbd735e75-2692-4abe-b8b1-fbddbe21e546
。問題はマルチスレッドですか?それとも私は何か間違ったことをしていますか?ありがとう。
zeromq - NetMQ は ZMTP 1.0 と互換性がありますか?
NetMQ が ZMTP 1.0 と互換性があるかどうか知っている人はいますか? サポートされているバージョンに関する情報が見つかりません。