2011-08-17 37 views
8

我是新來的QuickFix和我有一些基本的問題有關的QuickFix:QuickFix的C++庫 - 一般問題有關ThreadedSocketInitiator

1) 考慮,在同一時間,會有一個受體和之間只有一個固定會話引發劑。我不太瞭解ThreadedSocketInitiator和ThreadedSocketAcceptor類的用途。

或者做這些類中,以方便多個會話,其中多個「啓動器」可以跟不同的受體,反之亦然?

2)不和quickfix有一些種類的消息持久性的,例如,如果消息在傳輸過程中丟失了,會發生什麼?引擎是否負責重新發送消息?

回答

5

1)QuickFix的每個會話使用1個線程。你可以假設的引擎是整個過程。

ThreadedSocketInitiator用於想要將引擎用作客戶端時。您連接到另一臺服務器並傳輸消息。您啓動連接,因此名稱發起者。您爲使用服務器設置的每個會話生成一個新線程。

ThreadedSocketAcceptor用於想要將引擎用作服務器。你接受連接,因此接受者。當您與客戶端建立新會話時,只會爲該特定會話產生一個新線程。

記住所有會話都有一個唯一的ID多個會話之間進行區分。服務器可以與同一客戶端進行多個會話,反之亦然。

2)是的。但接收方必須發起重發請求消息以使發送方再次發送。它將通過檢查配置文件中的延遲標誌自動執行,如果它沒有收到對已發送消息的回覆。

+0

感謝。如果我用兩個SocketInitiator對象從兩邊開始兩個會話,那麼Quickfix將啓動兩個會話(也許內部有兩個線程)。那麼,ThreadedSocketInitiator與SocketInitiator有什麼不同呢? – Lazylabs

+0

@Lazylabs - SocketInitiator是一個單線程模型,ThreadedSocketInitiator是一個多線程模型。 – DumbCoder

+0

實際上,toApp和fromApp消息有單獨的線程。不過,互斥鎖具有廣泛的用途,因此用戶應用程序可以將每個會話用作邏輯線程。 – jaybny