0

要求 (フレーム) B を送信して応答を受信すると同時に、前の要求 (A) に対する応答を既に待機している場合、B タスクで受信した応答は、実際には要求 A に対する応答です。

request A sent
request B sent
request B processed (quick)
response B sent
response B received (*)
...
request A processed (slow)
response A sent
response A received 

単純なマッチングでは、ポイント (*) でマッチング リクエスト A--レスポンス B を取得します。

では、それらを同期させる方法は? つまり、リクエスト A をレスポンス A で終了させ、リクエスト B をレスポンス B で終了させたいと考えています。記録のために、私はディーラールーターソケットを使用しています。

Dictionary送信された各リクエストにタスク完了トークンがバインドされたプール リクエスト ( ) を作成することを考えています。タスクはプールに新しいスロットを作成し、リクエストを送信して完了を待ちます。バックグラウンドでは、常に実行されているタスク (レシーバー) があります。これは単に応答を受信し、各応答を適切なスロットに配置し、指定されたタスク トークンを完了として設定します。私は正しい道を進んでいますか、それとも間違っていますか、それともすでに NetMQ に実装されていますか?

4

2 に答える 2

1

私のブログで AsyncSocket パターンについて読んでください。

http://somdoron.com/2014/08/netmq-asp-net/

TaskCompletionSource、各リクエストのシーケンス、および辞書の例があります。

于 2016-09-27T06:46:34.803 に答える
0

同期の要求/応答通信が必要な場合は、DEALER/ROUTER の代わりに REQ/REP ソケットを使用できます。

非同期通信が必要で、応答を要求に一致させる必要がある場合は、要求で一意の要求 ID を送信し、応答でこの要求 ID を返すことができます。

于 2016-09-26T20:35:39.967 に答える