-
Notifications
You must be signed in to change notification settings - Fork 7
Mojo::Transaction::WebSocket
Mojo::Transaction::WebSocket - WebSocketのトランザクションのコンテナ
use Mojo::Transaction::WebSocket;
my $ws = Mojo::Transaction::WebSocket->new;
Mojo::Transaction::WebSocketはThe WebSocket protocol
で説明されているWebSocketのトランザクションのコンテナです。 64bitフレームは64bit整数をサポートしたPerlが必要で、 もしもしなければ32bitに制限されることに注意してください。
Mojo::Transaction::WebSocketはMojo::Transactionからすべてのイベントを継承しており、 次の新しいイベントを発行します。
$ws->on(drain => sub {
my $ws = shift;
...
});
すべてのデータが送信されたときに一度だけ発行されます。
$ws->on(drain => sub {
my $ws = shift;
$ws->send(time);
});
$ws->on(frame => sub {
my ($ws, $frame) = @_;
...
});
WebSocketのフレームが到達したときに発行されます。
$ws->unsubscribe('frame');
$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]";
});
$ws->on(message => sub {
my ($ws, $message) = @_;
...
});
WebSocketのメッセージが到達したときに発行されます。
$ws->on(message => sub {
my ($ws, $message) = @_;
say "Message: $message";
});
Mojo::Transaction::WebSocketはMojo::Transactionからすべての属性 を継承しており、次の新しい属性を実装しています。
my $handshake = $ws->handshake;
$ws = $ws->handshake(Mojo::Transaction::HTTP->new);
オリジナルのハンドシェイクのトランザクション。デフォルトはMojo::Transaction::HTTPオブジェクトです。
my $masked = $ws->masked;
$ws = $ws->masked(1);
XOR暗号文とランダムな32ビットのキーを持った外に出てゆくフレームのマスク。
my $size = $ws->max_websocket_size;
$ws = $ws->max_websocket_size(1024);
WebSocketメッセージの最大バイトサイズ。 デフォルトは<MOJO_MAX_WEBSOCKET_SIZE>か262144
。
Mojo::Transaction::WebSocketはMojo::Transaction のすべてのメソッドを継承しており、 次の新しいメソッドを実装しています。
my $bytes = $ws->build_frame($fin, $op, $payload);
WebSocketのフレームを構築します。
# Continuation frame with FIN bit and payload
say $ws->build_frame(1, 0, 0, 0, 0, 'World!');
# Text frame with payload
say $ws->build_frame(0, 0, 0, 0, 1, 'Hello');
# Binary frame with FIN bit and payload
say $ws->build_frame(1, 0, 0, 0, 2, 'Hello World!');
# Close frame with FIN bit and without payload
say $ws->build_frame(1, 0, 0, 0, 8, '');
# Ping frame with FIN bit and payload
say $ws->build_frame(1, 0, 0, 0, 9, 'Test 123');
# Pong frame with FIN bit and payload
say $ws->build_frame(1, 0, 0, 0, 10, 'Test 123');
my $success = $ws->client_challenge;
WebSocketハンドシェイクのチャレンジをチェックします。 クライアントのみによって利用されます。
$ws->client_handshake;
WebSocketハンドシェイク。
$ws = $ws->client_read($data);
生のWebSocketのデータを読み込みます。
my $chunk = $ws->client_write;
書き込むための生のWebSocketのデータ。
my $connection = $ws->connection;
Mojo::Transactionのconnection
のエイリアス。
$ws->finish;
WebSocketの接続を緩やかに終了する。
my $is_websocket = $ws->is_websocket;
真。
my $local_address = $ws->local_address;
Mojo::Transactionのlocal_address
のエイリアス。
my $local_port = $ws->local_port;
Mojo::Transactionのlocal_port
のエイリアス。
my $frame = $ws->parse_frame(\$bytes);
WebSocketのフレームを解析します。
# ひとつのフレームを解析して、バッファーから取り除く
my $frame = $ws->parse_frame(\$buffer);
say "FIN: $frame->[0]";
say "RSV1: $frame->[1]";
say "RSV2: $frame->[2]";
say "RSV3: $frame->[3]";
say "Opcode: $frame->[4]";
say "Payload: $frame->[5]";
my $remote_address = $ws->remote_address;
Mojo::Transactionのremote_address
のエイリアス。
my $remote_port = $ws->remote_port;
Mojo::Transactionのremote_port
のエイリアス。
my $req = $ws->req;
Mojo::Transactionのreq
のエイリアス。
my $req = $ws->res;
Mojo::Transactionのres
のエイリアス。
$ws = $ws->resume;
Mojo::Transactionのresume
のエイリアス。
$ws->send({binary => $bytes});
$ws->send({text => $bytes});
$ws->send([$fin, $rsv1, $rsv2, $rsv3, $op, $payload]);
$ws->send('Hi there!');
$ws->send('Hi there!' => sub {...});
WebSocketを通してメッセージあるいはフレームを送信します。 オプションの排出コールバックはすべてのデータが書き込まれたときに一度だけ実行されます。
# "Ping"フレームの送信
$ws->send([1, 0, 0, 0, 9, 'Hello World!']);
$ws = $ws->server_handshake;
WebSocketのハンドシェイク。
$ws = $ws->server_read($data);
生のWebSocketのデータを読み込みます。
my $chunk = $ws->server_write;
書き込むための生のWebSocketのデータ。
MOJO_WEBSOCKET_DEBUG
環境変数を設定すれば、さらなる詳細な情報をSTDERR
に出力することができます。
MOJO_WEBSOCKET_DEBUG=1
Mojolicious, Mojolicious::Guides, http://mojolicio.us.
(2012/6/1更新)
Mojolicious日本語訳は「Perlゼミ制作」です。