此代码似乎无法正常工作,我也不知道如何调试它。.我正在使用Mojolicious通过websocket发送订阅的消息。
use Mojo::Redis;
#Controller
sub data_stream {
my $c = shift;
$c->inactivity_timeout(300);
my $redis = Mojo::Redis-new('redis://xxxxxxxx@localhost:6379/');
my $pubsub = $redis->pubsub;
my $cb = $pubsub->listen('data' => sub {
my ($pubsub, $msg) = @_;
$c->app->log->debug("WS: $msg");
$c->send({text => $msg});
});
$c->on(finish => sub {
$c->app->log->debug("WS CONNECTION CLOSED!");
$pubsub->unlisten('data' => $cb)
});
}
从下面的路由器调用上面的
$router->websocket('/data_stream')->to('grid#data_stream');
答案 0 :(得分:1)
这是我自己回答的第二个问题。 当我将Mojo :: Redis-new用作助手
时,这终于可以工作了所以在路由器文件中;
$self->helper(redis => sub {
state $redis = Mojo::Redis->new('redis://anything:jejakredis1234!@localhost:6379/');
});
并在控制器中
sub data_stream {
my $c = shift;
$c->inactivity_timeout(300);
my $pubsub = $c->redis->pubsub;
my $cb = $pubsub->listen('data' => sub {
my ($pubsub, $msg) = @_;
$c->app->log->debug("WS: $msg");
$c->send({text => $msg});
});
$c->on(finish => sub {
$c->app->log->debug("WS CONNECTION CLOSED!");
$pubsub->unlisten('data' => $cb)
});
}