私は実装在庫exachangeエンジンです。 私はUDPを介してティッカーデータを受信し、各UDPパケットはシーケンス番号を持っています。 取引所は、パケットを一つずつ送信しますが、UDPは、彼らが一例として、slighty「混合」の順序で受信することができる(となります)ためgaranteeていないので、私は正しい順序でパケットを受信すると仮定するとudpセッションを再構築するためにはどのような構造が必要ですか?
1 2 3 5 4 6 7 10 9 8 11 12 13 14 15
をすべてが簡単になります。パケットを追加して後でデキューするには、Queue
を使用します。しかし、パケットが完全に注文されていないので、私はいくつかの問題があります:
- パケットの格納にはどのような構造が必要ですか?私はパケットを待ち行列とデキューする能力が必要であり、配列内の任意の位置にパケットを追加する能力も必要です。
パケットが失われた場合は、「回復」手順を立ち上げる必要があります。ですから、 "nextPacketSequenceNumber!= currentPacketSequenceNumber + 1"と言うときはいつも、5msとおそらくパケットが到着するのを待たなければなりません。例
1 2 3 5 ... after 5 ms .... 4 - OK 1 2 3 5 ... after 10 ms .... 4 - recover 1 2 3 5 6 7 - recover
'パケットを格納するために使用する構造体は何ですか?あなたが求めているものは何ですか?'SortedDictionary'または' SortedList'を使用してください –