Mojo::Transaction::WebSocket - WebSocket transaction

NAME  SYNOPSIS  DESCRIPTION  EVENTS  binary  drain  finish  frame  json  message  resume  text  ATTRIBUTES  compressed  established  handshake  masked  max_websocket_size  METHODS  build_message  client_read  client_write  closed  connection  finish  is_websocket  kept_alive  local_address  local_port  parse_message  protocol  remote_address  remote_port  req  res  resume  send  server_read  server_write  with_compression  with_protocols  SEE ALSO 

NAME

Mojo::Transaction::WebSocket − WebSocket transaction

SYNOPSIS

use Mojo::Transaction::WebSocket;
# Send and receive WebSocket messages
my $ws = Mojo::Transaction::WebSocket−>new;
$ws−>send('Hello World!');
$ws−>on(message => sub ($ws, $msg) { say "Message: $msg" });
$ws−>on(finish => sub ($ws, $code, $reason) { say "WebSocket closed with status $code." });

DESCRIPTION

Mojo::Transaction::WebSocket is a container for WebSocket transactions, based on RFC 6455 <https://tools.ietf.org/html/rfc6455> and RFC 7692 <https://tools.ietf.org/html/rfc7692>.

EVENTS

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

binary

$ws−>on(binary => sub ($ws, $bytes) {...});

Emitted when a complete WebSocket binary message has been received.

$ws−>on(binary => sub ($ws, $bytes) { say "Binary: $bytes" });

drain

$ws−>on(drain => sub ($ws) {...});

Emitted once all data has been sent.

$ws−>on(drain => sub ($ws) { $ws−>send(time) });

finish

$ws−>on(finish => sub ($ws, $code, $reason) {...});

Emitted when the WebSocket connection has been closed.

frame

$ws−>on(frame => sub ($ws, $frame) {...});

Emitted when a WebSocket frame has been received.

$ws−>on(frame => sub ($ws, $frame) {
say "FIN: $frame−>[0]";
say "RSV1: $frame−>[1]";
say "RSV2: $frame−>[2]";
say "RSV3: $frame−>[3]";
say "Opcode: $frame−>[4]";
say "Payload: $frame−>[5]";
});

json

$ws−>on(json => sub ($ws, $json) {...});

Emitted when a complete WebSocket message has been received, all text and binary messages will be automatically JSON decoded. Note that this event only gets emitted when it has at least one subscriber.

$ws−>on(json => sub ($ws, $hash) { say "Message: $hash−>{msg}" });

message

$ws−>on(message => sub ($ws, $msg) {...});

Emitted when a complete WebSocket message has been received, text messages will be automatically decoded. Note that this event only gets emitted when it has at least one subscriber.

$ws−>on(message => sub ($ws, $msg) { say "Message: $msg" });

resume

$tx−>on(resume => sub ($tx) {...});

Emitted when transaction is resumed.

text

$ws−>on(text => sub ($ws, $bytes) {...});

Emitted when a complete WebSocket text message has been received.

$ws−>on(text => sub ($ws, $bytes) { say "Text: $bytes" });

ATTRIBUTES

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

compressed

my $bool = $ws−>compressed;
$ws = $ws−>compressed($bool);

Compress messages with "permessage−deflate" extension.

established

my $bool = $ws−>established;
$ws = $ws−>established($bool);

WebSocket connection established.

handshake

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

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

masked

my $bool = $ws−>masked;
$ws = $ws−>masked($bool);

Mask outgoing frames with XOR cipher and a random 32−bit 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 the "MOJO_MAX_WEBSOCKET_SIZE" environment variable or 262144 (256KiB).

METHODS

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

build_message

my $frame = $ws−>build_message({binary => $bytes});
my $frame = $ws−>build_message({text => $bytes});
my $frame = $ws−>build_message({json => {test => [1, 2, 3]}});
my $frame = $ws−>build_message($chars);

Build WebSocket message.

client_read

$ws−>client_read($data);

Read data client-side, used to implement user agents such as Mojo::UserAgent.

client_write

my $bytes = $ws−>client_write;

Write data client-side, used to implement user agents such as Mojo::UserAgent.

closed

$tx = $tx−>closed;

Same as "completed" in Mojo::Transaction, but also indicates that all transaction data has been sent.

connection

my $id = $ws−>connection;

Connection identifier.

finish

$ws = $ws−>finish;
$ws = $ws−>finish(1000);
$ws = $ws−>finish(1003 => 'Cannot accept data!');

Close WebSocket connection gracefully.

is_websocket

my $bool = $ws−>is_websocket;

True, this is a Mojo::Transaction::WebSocket object.

kept_alive

my $bool = $ws−>kept_alive;

Connection has been kept alive.

local_address

my $address = $ws−>local_address;

Local interface address.

local_port

my $port = $ws−>local_port;

Local interface port.

parse_message

$ws−>parse_message([$fin, $rsv1, $rsv2, $rsv3, $op, $payload]);

Parse WebSocket message.

protocol

my $proto = $ws−>protocol;

Return negotiated subprotocol or "undef".

remote_address

my $address = $ws−>remote_address;

Remote interface address.

remote_port

my $port = $ws−>remote_port;

Remote interface port.

req

my $req = $ws−>req;

Handshake request, usually a Mojo::Message::Request object.

res

my $res = $ws−>res;

Handshake response, usually a Mojo::Message::Response object.

resume

$ws = $ws−>resume;

Resume "handshake" transaction.

send

$ws = $ws−>send({binary => $bytes});
$ws = $ws−>send({text => $bytes});
$ws = $ws−>send({json => {test => [1, 2, 3]}});
$ws = $ws−>send([$fin, $rsv1, $rsv2, $rsv3, $op, $payload]);
$ws = $ws−>send($chars);
$ws = $ws−>send($chars => sub {...});

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

# Send "Ping" frame
use Mojo::WebSocket qw(WS_PING);
$ws−>send([1, 0, 0, 0, WS_PING, 'Hello World!']);

server_read

$ws−>server_read($data);

Read data server-side, used to implement web servers such as Mojo::Server::Daemon.

server_write

my $bytes = $ws−>server_write;

Write data server-side, used to implement web servers such as Mojo::Server::Daemon.

with_compression

$ws−>with_compression;

Negotiate "permessage−deflate" extension for this WebSocket connection.

with_protocols

my $proto = $ws−>with_protocols('v2.proto', 'v1.proto');

Negotiate subprotocol for this WebSocket connection.

SEE ALSO

Mojolicious, Mojolicious::Guides, <https://mojolicious.org>.


Updated 2024-01-29 - jenkler.se | uex.se