无法让 Mojo::Redis2 订阅
Can't get Mojo::Redis2 to subscribe
我写了下面的程序(redis.pl
),Redis 在本地 运行ning 使用默认端口设置,但是当我 运行 redis.pl
使用 morbo redis.pl
我从来没有在屏幕上看到 ********* 1
。这是为什么?订阅似乎永远不会发生。我该如何解决这个问题?
#!/usr/bin/perl
use v5.18;
use warnings;
use Mojolicious::Lite;
use Mojo::Redis2;
say "Welcome";
my $redis = Mojo::Redis2->new();
$redis->subscribe(['pubsub'] => sub {
say "********* 1";
});
get '/' => sub {
my $self = shift;
$self->render(json => {a => 1});
};
app->start;
我通过确保在永久变量中保留 $redis->subscribe
的 return 值解决了这个问题,如下所示:
而不是...
$redis->subscribe(['pubsub'] => sub {
say "********* 1";
});
...我写...
our $subscription = $redis->subscribe(['pubsub'] => sub {
say "********* 1";
});
这解决了问题。我猜它类似于 AnyEvent
,其中 return 值必须保持有效。
我目前没有安装 redis 实例,但我认为这应该可以。
#!/usr/bin/perl
use v5.18;
use warnings;
use Mojolicious::Lite;
use Mojo::Redis2;
say "Welcome";
helper redis => sub {state $redis = Mojo::Redis2->new()};
app->redis->subscribe(['pubsub'] => sub {
say "********* 1";
});
get '/' => sub {
my $self = shift;
$self->render(json => {a => 1});
};
app->start;
我怀疑一旦 redis 实例超出范围,您就会失去它及其连接。
我写了下面的程序(redis.pl
),Redis 在本地 运行ning 使用默认端口设置,但是当我 运行 redis.pl
使用 morbo redis.pl
我从来没有在屏幕上看到 ********* 1
。这是为什么?订阅似乎永远不会发生。我该如何解决这个问题?
#!/usr/bin/perl
use v5.18;
use warnings;
use Mojolicious::Lite;
use Mojo::Redis2;
say "Welcome";
my $redis = Mojo::Redis2->new();
$redis->subscribe(['pubsub'] => sub {
say "********* 1";
});
get '/' => sub {
my $self = shift;
$self->render(json => {a => 1});
};
app->start;
我通过确保在永久变量中保留 $redis->subscribe
的 return 值解决了这个问题,如下所示:
而不是...
$redis->subscribe(['pubsub'] => sub {
say "********* 1";
});
...我写...
our $subscription = $redis->subscribe(['pubsub'] => sub {
say "********* 1";
});
这解决了问题。我猜它类似于 AnyEvent
,其中 return 值必须保持有效。
我目前没有安装 redis 实例,但我认为这应该可以。
#!/usr/bin/perl
use v5.18;
use warnings;
use Mojolicious::Lite;
use Mojo::Redis2;
say "Welcome";
helper redis => sub {state $redis = Mojo::Redis2->new()};
app->redis->subscribe(['pubsub'] => sub {
say "********* 1";
});
get '/' => sub {
my $self = shift;
$self->render(json => {a => 1});
};
app->start;
我怀疑一旦 redis 实例超出范围,您就会失去它及其连接。