2012-03-12 42 views
1

專用服務器提供四個連接 - HTTP,HTTPS,Telnet和SSH。我們具有與服務器連接的特定優先級。例如遵循連接到服務器的順序 - HTTPS,HTTP,Telnet和SSH。這意味着首先客戶端將嘗試使用HTTPS進行連接。如果失敗,則會再次使用HTTPS重試。如果再次失敗,則會嘗試使用HTTP等。我會得到相應的連接對象,它會成功。例如如果與HTTP連接獲得成功,那麼它將返回一個HTTP連接對象。通過連接接口實現回退機制

你能幫我找出任何可以幫助的模式嗎?

目前我正在考慮使用代理來實現它。我將有一個ConnectionProxy類,這個類將找到第一個成功的連接協議。

+0

這是從http://stackoverflow.com/questions/9630554/best-ways-to-handle-the-connection-interface – daxim 2012-03-12 18:51:06

回答

1

我不確定ConnectionProxyConnection對象之間的差異。 Connection對象應該有一個標準的接口以允許它們互換使用,以及指定它們之間差異的實現。

Perl中的「接口」是輕量級的。它們只是一個物體必須履行的期望的表述,以便說明物體DOES那個角色。

至於連接工廠

use English qw<$EVAL_ERROR>; 
... 
foreach my $con_class (
    qw< 
    Connection::HTTPS 
    Connection::HTTP 
    Connection::Telnet 
    Connection::SSH 
    >) { 
    my $conn; 
    eval { $conn = $con_class->new(HostAndPort => '127.0.0.1:21'); }; 
    return $conn if $conn && !$EVAL_ERROR; 
    $logger->error($EVAL_ERROR); 
} 

的最簡單的實現現在,我會傾向於保持連接類的列表中某些配置的地方(最好是YAML,對我來說)。但是,這又是最簡單的故障切換實施。

只是作爲一個開發問題,我覺得爲每個接口進行通用測試是很有用的。如果你說類C DOES接口I,通用測試可以在將它添加到可用接口實現列表之前驗證這個事實。該測試可以驗證編譯器可以做的相同事情 - 等等。