2016-09-26 21 views
0

私は前回のリクエスト(A)に対する応答を待っている間に、リクエスト(フレーム)Bを送信してレスポンスを受信すると、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で要求Aを終了し、応答Bで各要求を処理するのにどれくらい時間がかかってもBを要求したいと思います。記録のために私はディーラールータソケットを使用しています。

送信されたリクエストごとにタスク完了トークンがバインドされたプールリクエスト(Dictionary)の作成について考えています。タスクは、プール内に新しいスロットを作成し、要求を送信し、完了を待つ。バックグラウンドでは、受信機であるすべての時間に実行されるタスクがあります。単に応答を受け取り、適切なスロットに各応答を入れ、与えられたタスクトークンを完了したものとして設定します。私は間違っているのでしょうか、それともNetMQにすでに実装されていますか?

答えて

1

私のブログでAsyncSocketパターンについての記事を読む:

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

それはTaskCompletionSource、各要求と辞書のための配列との例があります。

+0

ありがとう、私はそのような解決策について正確に考えていました。 – astrowalker

0

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

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

+0

まあ、私はすでにIDを前後に送信していますが、それは** my **データです、正しいですか?私。 ZeroMQはそれらを処理しません、そうですか?だから私はまだそれらのIDに一致するアルゴリズムを考え出す必要があります。 – astrowalker

+1

これは間違いありません。要求に対する応答と一致する必要があります。 – rveerd