Hateburo: kazeburo hatenablog

SRE / 運用系小姑 / Goを書くPerl Monger

How to keepalive more than one connections with Furl - Furlで2個以上の接続を維持する技

Furl can do keepalive connection by passing connection pool object to connection_pool option, By default, Furl::ConnectionCache is used.
But Furl::ConnectionCache can keep only one connection at once.

To do keepalive more one connections. you need to make a connection pool object like this example.

my $conncache = Cache::LRU->new(size => 10);
my $furl = Furl->new(
    connection_pool => Plack::Util::inline_object(
        steal => sub{ my $key = $_[0].':'.$_[1]; $conncache->get($key) },
        push => sub{ my $key = $_[0].':'.$_[1]; $conncache->set($key,$_[2])  }
    ),
);

Furlはconnection_poolにコネクションをキャッシュするオプジェクトを渡すことで、接続のkeepaliveができます。デフォルトはFurl::ConnectionCacheが使われるのですが、Furl::ConnectionCacheは一度に1つしか接続を保つことができません。
なので、複数の接続をkeepaliveしたい場合には、別のコネクションプールオブジェクトを作って渡す必要ありますね!

ということにさっき気付いた!

Why Plack::Util? Plack will be installed anywhere