Как сделать так, чтобы клиент Mojo :: UserAgent websockets работал? - PullRequest
0 голосов
/ 27 марта 2020

Я пытаюсь создать клиент websocket с Mojo :: UserAgent. Клиент должен отправлять сообщения каждую секунду и распечатывать сообщения, полученные с сервера. Идея состоит в том, чтобы иметь два работающих для тестирования pubsub среди работников гипнотической системы (чтобы узнать, как это работает).

Я попытался сделать это:

use Mojo::UserAgent;

$\ = "\n"; $, = "\t";

my $ua  = Mojo::UserAgent->new;

my $tx = $ua->build_websocket_tx('ws://127.0.0.1:3006/chat');

$ua->start($tx => sub {
           my ($ua, $tx) = @_;
           print 'WebSocket handshake failed!' and return unless $tx->is_websocket;
           $tx->on(message => sub {
               my ($tx, $msg) = @_;
                    print "Received: $msg";
               });

           while (1) {
               print "Sending";
               $tx->send("Hi from $$!");
               sleep 1;
           }
       });

Mojo::IOLoop->start unless Mojo::IOLoop->is_running;

, который, кажется, только отправляет, и это:

use Mojo::UserAgent;

$\ = "\n"; $, = "\t";

my $ua  = Mojo::UserAgent->new;

$ua->websocket_p('ws://127.0.0.1:3006/chat')
    ->then(sub {
           my $tx = shift;
           my $promise = Mojo::Promise->new;
           $tx->on(finish => sub { $promise->resolve });
           $tx->on(message => sub {
               my ($tx, $msg) = @_;
               print "$$ received webSocket message: $msg";
           });
           return $promise;
       })
    ->catch(sub {
            my $err = shift;
            warn "WebSocket error: $err";
        })
    ->wait;

while (1) {
    $ua->websocket_p('ws://127.0.0.1:3006/chat')
    ->then(sub {
           my $tx = shift;
           my $promise = Mojo::Promise->new;
           $tx->on(finish => sub { $promise->resolve });
               print "sending message from $$";
               $tx->send("Hi from $$");
               return $promise->resolve;
           })
    ->catch(sub {
            my $err = shift;
            warn "WebSocket error: $err";
        })
    ->wait;
}

Mojo::IOLoop->start unless Mojo::IOLoop->is_running;

, в котором клиенты либо только отправляют, либо только получают.

Возможно, в базисе c logi c есть что-то, что я не делаю правильно, но Я не могу понять, что это такое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...