通过连接接口实现回退机制

时间:2012-03-12 10:01:39

标签: perl

Specialized Server提供四个连接接口 - HTTP,HTTPS,Telnet和SSH。我们具有与服务器连接的特定优先级。例如按照以下顺序连接到服务器 - HTTPS,HTTP,Telnet和SSH。这意味着首先客户端将尝试使用HTTPS进行连接。如果失败,那么它将使用HTTPS再次重试。如果再次失败,那么它将尝试使用HTTP,依此类推。我将获得相应的连接对象,它将成功。例如如果与HTTP的连接获得成功,则它将返回HTTP连接对象。

你能帮我找一下这里有用的模式吗?

目前我正在考虑使用代理实现它。我将有一个ConnectionProxy类,这个类将找到第一个成功的连接协议。

1 个答案:

答案 0 :(得分: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,则通用测试可以在将其添加到可用接口实现列表之前验证此事实。测试可以验证编译器可以执行的相同操作 - 以及更多。