Почему разрывы соединений websocket

после запуска клиента против WebSocket echo server он отключается примерно через полминуты с WebSocket closed with status 1006 сообщение.

пожалуйста, предложите, как избежать такого поведения (клиенты браузера, похоже, не затронуты)

use 5.20.0;
use Mojo::UserAgent;
use Mojo::IOLoop;

sub ws_connect {

  state $ua;

  say "Connecting..";
  $ua = Mojo::UserAgent->new;
  $ua->websocket('ws://127.0.0.1:3000/echo' => &onConnect);

}

sub onConnect {
  my ($ua, $tx) = @_;

  if (!$tx->is_websocket) {
        say 'WebSocket handshake failed!';
  }
  say "Connected!";

  $tx->on(finish => sub {
        my ($tx, $code) = @_;
        say "WebSocket closed with status $code";
  });

}

ws_connect();
Mojo::IOLoop->start;

Эхо-сервера

use Mojolicious::Lite;
use Mojo::EventEmitter;

helper events => sub { state $events = Mojo::EventEmitter->new };

# get '/' => 'chat';

websocket '/echo' => sub {
  my $c = shift;

  $c->inactivity_timeout(3600);

  # Forward messages from the browser
  $c->on(message => sub { shift->events->emit(mojochat => shift) });

  # Forward messages to the browser
  my $cb = $c->events->on(mojochat => sub { $c->send(pop) });
  $c->on(finish => sub { shift->events->unsubscribe(mojochat => $cb) });
};

app->start;

1 ответов


Если нет данных между клиентом и сервером, возможно, вы достигли тайм-аута бездействия.

вы пытались увеличить inactivity_timeout? (или вы можете просто установить его в 0 для неограниченного бездействия)