我有一个使用 QuickFIX/n 作为 FIX 层的修复客户端。
如果由于某种技术原因我的客户端断开连接,FIX 服务器将继续发送消息,直到它注意到客户端不再存在(我假设有心跳)。
当我的客户端重新连接时,它会注意到第一条消息的间隙。例如,如果我的客户端最后收到的消息 SeqNuM=124 并且在重新连接时服务器发送 SeqNum=152,这意味着服务器在意识到断开连接之前将消息从 125 发送到 151。
我的问题发生在之后。我的客户发送一个重新发送请求 34=2,BeginSeqNo 7=125 和 EndSeqNo=0(给我一切)。在此重传期间和完成之前,FIX 服务器向我发送 SeqNo=153 的新消息
所以我的客户得到的是:
- Disconnects with last message 124
- Reconnects
- Receive 151
- Ask for Resend from 125 to 0 (everything after 125)
- Receive 125
- Receive 126
- Receive 127
- Receive 152 (35=8) <-- this makes the retransmission abort on my side
- Ask For resend from 128 to 0
---> if the number of message to resend is too high and new messages keep coming in
my client never manages to get the full retransmission in one go.
与对方(负责服务器)交谈时,他们说在重传期间继续发送新消息是可以的,我应该缓存它们直到重传完成。
看起来这不是 QuickFIX/n 实现的方式(我没有找到处理这种特定情况的选项),但是在查看 FIX 文档时,我找不到有关此缓存过程的任何信息。我还假设这个缓存过程非常复杂,因为我可能应该缓存给定时间(否则我可能会永远等待丢失的消息)。
我的问题很简单:这个缓存过程是什么,我在哪里可以找到有关它的规范?而且,这是由 QuickFIX 库处理的,还是我应该在它之上实现一些特定的东西?