Perl Redis слушает, не подписывается на канал - PullRequest
0 голосов
/ 27 ноября 2018

Этот код, похоже, не работает, и я не знаю, как его отладить .. Я использую 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');

1 Ответ

0 голосов
/ 28 ноября 2018

Лол, это второй вопрос, на который я сам ответил.Это наконец работает, когда я переместил бит Mojo :: Redis в качестве помощника

Так в файле маршрутизатора;

$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)
    });
}
...