Mojo::Transaction::WebSocket - WebSocketトランザクション
使い方
use Mojo::Transaction::WebSocket; my $ws = Mojo::Transaction::WebSocket->new;
説明
Mojo::Transaction::WebSocketはRFC 6455 で説明されているWebSocketのトランザクションのコンテナです。 64bitフレームは64bit整数をサポートしたPerlが必要で、 もしもしなければ32bitに制限されることに注意してください。
イベント
Mojo::Transaction::WebSocketはMojo::Transactionからすべてのイベントを継承しており、 次の新しいイベントを発生します。
binary
$ws->on(binary => sub { my ($ws, $bytes) = @_; ... });
完全なWebSocketバイナリメッセージを受け取ったときに発生します。
$ws->on(binary => sub { my ($ws, $bytes) = @_; say "Binary: $bytes"; });
drain
$ws->on(drain => sub { my $ws = shift; ... });
すべてのデータが送信されたときに一度だけ、発生します。
$ws->on(drain => sub { my $ws = shift; $ws->send(time); });
finish
$ws->on(finish => sub { my ($ws, $code, $reason) = @_; ... });
Webソケット接続が閉じられたときに発生します。
frame
$ws->on(frame => sub { my ($ws, $frame) = @_; ... });
WebSocketのフレームが到達したときに発生します。
$ws->on(frame => sub { my ($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 { my ($ws, $json) = @_; ... });
完全なWebSocketメッセージを受け取ったときに発生します。 すべてのテキストとバイナリのメッセージは 自動的にJSONにデコードされます。 このイベントは少なくとも一人の購読者が いるときだけ発生することに注意してください。
$ws->on(json => sub { my ($ws, $hash) = @_; say "Message: $hash->{msg}"; });
message
$ws->on(message => sub { my ($ws, $message) = @_; ... });
WebSocketのメッセージが到達したときに発行されます。 このイベントは少なくとも一人の購読者が いるときだけ発生することに注意してください。
$ws->on(message => sub { my ($ws, $message) = @_; say "Message: $message"; });
text
$ws->on(text => sub { my ($ws, $bytes) = @_; ... });
完全なテキストメッセージを受け取ったときに発生します。
$ws->on(text => sub { my ($ws, $bytes) = @_; say "Text: $bytes"; });
属性
Mojo::Transaction::WebSocketはMojo::Transactionからすべての属性 を継承しており、次の新しい属性を実装しています。
compressed
my $bool = $ws->compressed; $ws = $ws->compressed($bool);
permessage-deflate
拡張でメッセージを圧縮します。
established
my $bool = $ws->established; $ws = $ws->established($bool);
WebSocket接続の確立。
handshake
my $handshake = $ws->handshake; $ws = $ws->handshake(Mojo::Transaction::HTTP->new);
オリジナルのハンドシェイクのトランザクション。デフォルトはMojo::Transaction::HTTPオブジェクトです。
masked
my $bool = $ws->masked; $ws = $ws->masked($bool);
XOR暗号文とランダムな32ビットのキーを持った外に出てゆくフレームのマスク。
max_websocket_size
my $size = $ws->max_websocket_size; $ws = $ws->max_websocket_size(1024);
WebSocketメッセージの最大バイトサイズ。 デフォルトは262144
(256KB)。
メソッド
Mojo::Transaction::WebSocketはMojo::Transaction のすべてのメソッドを継承しており、 次の新しいメソッドを実装しています。
build_message
my $bytes = $ws->build_message({binary => $bytes}); my $bytes = $ws->build_message({text => $bytes}); my $bytes = $ws->build_message({json => {test => [1, 2, 3]}}); my $bytes = $ws->build_message($chars);z
WebSocketメッセージを構築します。
client_read
$ws = $ws->client_read($data);
クライアント側のWebSocketのデータを読み込みます。 ユーザーエージェントの実装に利用されます。
client_write
my $chunk = $ws->client_write;
クライアント側のデータを書き込みます。 ユーザーエージェントの実装に利用されます。
closed
$tx = $tx->closed;
Mojo::Transactionの"completed"と同じですが、すべてのトランザクションが送信されたことを示します。
connection
my $id = $ws->connection;
接続の識別子。
finish
$ws = $ws->finish; $ws = $ws->finish(1000); $ws = $ws->finish(1003 => 'Cannot accept data!');
WebSocketの接続を緩やかに終了する。
is_websocket
my $is_websocket = $ws->is_websocket;
真。
kept_alive
my $kept_alive = $ws->kept_alive;
ケプトアライブされている接続。
local_address
my $local_address = $ws->local_address;
ローカルインターフェースのアドレス。
local_port
my $local_port = $ws->local_port;
ローカルインターフェースのポート。
parse_message
$ws->parse_message([$fin, $rsv1, $rsv2, $rsv3, $op, $payload]);
WebSocketのメッセージを解析。
remote_address
my $remote_address = $ws->remote_address;
リモートインターフェースのアドレス。
remote_port
my $remote_port = $ws->remote_port;
リモートインターフェースのポート。
req
my $req = $ws->req;
ハンドシェイクリクエスト。通常はMojo::Message::Requestオブジェクト。
res
my $req = $ws->res;
ハンドシェイクのレスポンス。通所は[Mojo::Message::Responseオブジェクト。
resume
$ws = $ws->resume;
ハンドシェイクトランザクションを再開します。
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 {...});
WebSocketを通してメッセージあるいはフレームを送信します。 オプションの排出コールバックはすべてのデータが書き込まれたときに一度だけ実行されます。
# "Ping"フレームの送信 # "Ping"フレームを送信 use Mojo::WebSocket 'WS_PING'; $ws->send([1, 0, 0, 0, WS_PING, 'Hello World!']);
server_read
$ws = $ws->server_read($data);
サーバー側のWebSocketデータを読み込みます。 Webサーバーの実装に利用されます。
server_write
my $chunk = $ws->server_write;
サーバー側でWebSocketデータを書き込みます。 Webサーバーの実装に利用されます。
with_compression
$ws->with_compression;
Negotiate このWebSocket接続のためにpermessage-deflate
拡張をネゴーシエイトします。
with_protocols
my $proto = $ws->with_protocols('v2.proto', 'v1.proto');
このWebSocketの接続のための交渉サブプロトコル
デバッグ
MOJO_WEBSOCKET_DEBUG
環境変数を設定すれば、さらなる詳細な情報をSTDERR
に出力することができます。
MOJO_WEBSOCKET_DEBUG=1
参考
Mojolicious, Mojolicious::Guides, http://mojolicio.us.
(Mojolicious 8.12を反映。2019年5月29日更新)