問題タブ [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# - Mono の NetMQ DealerSocket が Debian Wheezy のサーバーにメッセージを送信しないのに、Windows では送信するのはなぜですか?
Debian Wheezy の Mono 4.8 で NetMQ 4.0.0.1 に問題があります。
新しいメッセージを送信するために呼び出しを停止しない限り、ディーラーソケットはメッセージを送信しません。Thread.Sleep( 1000 )
タスクを作成する間に置くときは、すべて問題ありません。すべてが .Net Framework 4.5 の Windows と .Net Core 1.1 で動作していることを認めたいと思いますThread.Sleep()
。
デバッグ メッセージを追加したところ、ループ内のタスクに 100 個のソケットを作成していることがわかりREQ
ます。ルーターは、ディーラーを介して送信するよりもキューでリクエストを取得しており、TCP の反対側では何も起きていません。 REQ ソケットでのコール送信を停止します。Thread.Sleep()
5つのタスクごとに単純に機能しています。ポーラーのバグ、またはディーラーのバグのように見えます。
ミドルボックスのコードは次のとおりです。
クライアント側は次のとおりです。
そしてサーバー側:
誰にもアイデアはありますか?
別のスレッドからソケットを使用している可能性があると考えていたので、それを ThreadLocal 構造にパックしましたが、助けにはなりませんでした。 ;' すべてのソケットコンストラクター呼び出しの前に、これも役に立ちませんでした。mono を 4.4 から 4.8 に更新しましたが、見た目は同じです。
タスク間の Thread.Sleep(100) が問題を修正していることを確認しました。変です
c# - ブロックされたソケットでポーラーを破棄するには?
フレームの送信時にブロックされている単一のソケットがあり、ポーラー (およびそれに関連するすべてのもの) を破棄したいと考えています。ただし、私にはできません。ソケットで dispose を呼び出すと例外がスローされ、ポーラーで dispose を呼び出すと完全にブロックされます。
を使用しており、SendFrame
使用することもできますTrySendFrame
が、この例の目的は実際にソケットをブロックし、すべてをクリーンアップする方法を見つけることです。
例:
NetMQ 3.3.3.4 (現在の私のプライマリ バージョン) および 4.0.0.1 でテスト済み。