2012-03-12 72 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,通用测试可以在将它添加到可用接口实现列表之前验证这个事实。该测试可以验证编译器可以做的相同事情 - 等等。