I'm implementation stock exachange engine. I receive ticker data via UDP, each udp multicast packet has Sequence Number. Exchange sends packets one by one but because UDP doesn't garantee order they may be (and will be) received in slighty "mixed" order, as an example:
1 2 3 5 4 6 7 10 9 8 11 12 13 14 15
Assuming that I receive packets in right order everything will be easy - I can just use Queue
to add packets and dequeue them later. But because packets are not completely ordered I have several problems:
- What structure to use to store packets? I need ability to queue and dequeue packets and I also need ability to add packets at arbitrary possition in array
I need to rise "recover" procedure if some packet is lost. So every time when "nextPacketSequenceNumber != currentPacketSequenceNumber + 1" I should wait for say 5 ms and probably packet will arrive, if not so I should recover. For example
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