Я пытаюсь создать клиент 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 есть что-то, что я не делаю правильно, но Я не могу понять, что это такое.