The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Mojo::Transaction::WebSocket - WebSocket transaction container

SYNOPSIS

  use Mojo::Transaction::WebSocket;

  my $ws = Mojo::Transaction::WebSocket->new;

DESCRIPTION

Mojo::Transaction::WebSocket is a container for WebSocket transactions as described in http://www.ietf.org/id/draft-ietf-hybi-thewebsocketprotocol-17.txt. Note that this module is EXPERIMENTAL and might change without warning!

EVENTS

Mojo::Transaction::WebSocket inherits all events from Mojo::Transaction and can emit the following new ones.

frame

  $ws->on(frame => sub {
    my ($ws, $frame) = @_;
  });

Emitted when a WebSocket frame has been received.

  $ws->on(frame => sub {
    my ($ws, $frame) = @_;
    say 'Fin: ',     $frame->[0];
    say 'Type: ',    $frame->[1];
    say 'Payload: ', $frame->[2];
  });

message

  $ws->on(message => sub {
    my ($ws, $message) = @_;
  });

Emitted when a complete WebSocket message has been received.

  $ws->on(message => sub {
    my ($ws, $message) = @_;
    say "Message: $message";
  });

ATTRIBUTES

Mojo::Transaction::WebSocket inherits all attributes from Mojo::Transaction and implements the following new ones.

handshake

  my $handshake = $ws->handshake;
  $ws           = $ws->handshake(Mojo::Transaction::HTTP->new);

The original handshake transaction, defaults to a Mojo::Transaction::HTTP object.

masked

  my $masked = $ws->masked;
  $ws        = $ws->masked(1);

Mask outgoing frames with XOR cipher and a random 32bit key.

max_websocket_size

  my $size = $ws->max_websocket_size;
  $ws      = $ws->max_websocket_size(1024);

Maximum WebSocket message size in bytes, defaults to the value of MOJO_MAX_WEBSOCKET_SIZE or 262144.

METHODS

Mojo::Transaction::WebSocket inherits all methods from Mojo::Transaction and implements the following new ones.

build_frame

  my $bytes = $ws->build_frame($fin, $op, $payload);

Build WebSocket frame.

client_challenge

  my $success = $ws->client_challenge;

Check WebSocket handshake challenge.

client_handshake

  $ws->client_handshake;

WebSocket handshake.

client_read

  $ws->client_read($data);

Read raw WebSocket data.

client_write

  my $chunk = $ws->client_write;

Raw WebSocket data to write.

connection

  my $connection = $ws->connection;

The connection this websocket is using.

finish

  $ws = $ws->finish;

Finish the WebSocket connection gracefully.

is_websocket

  my $true = $ws->is_websocket;

True.

local_address

  my $local_address = $ws->local_address;

The local address of this WebSocket.

local_port

  my $local_port = $ws->local_port;

The local port of this WebSocket.

parse_frame

  my $frame = $ws->parse_frame(\$bytes);

Parse WebSocket frame.

remote_address

  my $remote_address = $ws->remote_address;

The remote address of this WebSocket.

remote_port

  my $remote_port = $ws->remote_port;

The remote port of this WebSocket.

req

  my $req = $ws->req;

The original handshake request.

res

  my $req = $ws->res;

The original handshake response.

resume

  $ws = $ws->resume;

Resume transaction.

send_frame

  $ws->send_frame($fin, $op, $payload);
  $ws->send_frame($fin, $op, $payload, sub {...});

Send a single frame non-blocking via WebSocket, the optional drain callback will be invoked once all data has been written.

send_message

  $ws->send_message([binary => $bytes]);
  $ws->send_message([text   => $bytes]);
  $ws->send_message('Hi there!');
  $ws->send_message('Hi there!', sub {...});

Send a message non-blocking via WebSocket, the optional drain callback will be invoked once all data has been written.

server_handshake

  $ws->server_handshake;

WebSocket handshake.

server_read

  $ws->server_read($data);

Read raw WebSocket data.

server_write

  my $chunk = $ws->server_write;

Raw WebSocket data to write.

DEBUGGING

You can set the MOJO_WEBSOCKET_DEBUG environment variable to get some advanced diagnostics information printed to STDERR.

  MOJO_WEBSOCKET_DEBUG=1

SEE ALSO

Mojolicious, Mojolicious::Guides, http://mojolicio.us.