我在寫一個Python程序,它將使用Twisted連接到一個TCP服務器。套接字另一端的服務器可能運行兩種可能的協議之一(protoA或protoB),但我不知道它是哪一種協議,直到我發起連接並「詢問」服務器是哪種協議用過的。我能夠確定連接後正在使用哪個版本的協議(protoA或protoB),但我不知道它提前。Twisted:我如何識別初始連接上的協議,然後委託給相應的協議實現?
很明顯,一種解決方案是在我的扭曲的協議派生類中有很多特殊代碼 - 即如果protoA這樣做,elif protoB會做其他事情。但是,我希望能夠在兩個獨立的協議實現中保留兩個獨立協議的代碼(儘管它們可能通過基類共享一些功能)。由於該協議的兩個版本都涉及維護狀態,因此必須將兩個版本混合到同一個類中,這很快會讓人感到困惑。
我該怎麼做?有沒有辦法在工廠實現中做最初的「協議識別」步驟,然後實例化正確的協議派生?