Skip to content

Mojo::Transaction::WebSocket

yuki-kimoto edited this page Jun 1, 2012 · 11 revisions

Mojolicious API リファレンス

名前

Mojo::Transaction::WebSocket - WebSocketのトランザクションのコンテナ

使い方

use Mojo::Transaction::WebSocket;

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

説明

Mojo::Transaction::WebSocketThe WebSocket protocol で説明されているWebSocketのトランザクションのコンテナです。 64bitフレームは64bit整数をサポートしたPerlが必要で、 もしもしなければ32bitに制限されることに注意してください。

イベント

Mojo::Transaction::WebSocketMojo::Transactionからすべてのイベントを継承しており、 次の新しいイベントを発行します。

drain

$ws->on(drain => sub {
  my $ws = shift;
  ...
});

すべてのデータが送信されたときに一度だけ発行されます。

$ws->on(drain => sub {
  my $ws = shift;
  $ws->send(time);
});

frame

$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]";
});

message

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

WebSocketのメッセージが到達したときに発行されます。

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

属性

Mojo::Transaction::WebSocketMojo::Transactionからすべての属性 を継承しており、次の新しい属性を実装しています。

handshake

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

オリジナルのハンドシェイクのトランザクション。デフォルトはMojo::Transaction::HTTPオブジェクトです。

masked

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

XOR暗号文とランダムな32ビットのキーを持った外に出てゆくフレームのマスク。

max_websocket_size

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

WebSocketメッセージの最大バイトサイズ。 デフォルトは<MOJO_MAX_WEBSOCKET_SIZE>か262144

メソッド

Mojo::Transaction::WebSocketMojo::Transaction のすべてのメソッドを継承しており、 次の新しいメソッドを実装しています。

build_frame

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');

client_challenge

my $success = $ws->client_challenge;

WebSocketハンドシェイクのチャレンジをチェックします。 クライアントのみによって利用されます。

client_handshake

$ws->client_handshake;

WebSocketハンドシェイク。

client_read

$ws = $ws->client_read($data);

生のWebSocketのデータを読み込みます。

client_write

my $chunk = $ws->client_write;

書き込むための生のWebSocketのデータ。

connection

my $connection = $ws->connection;

Mojo::Transactionconnectionのエイリアス。

finish

$ws->finish;

WebSocketの接続を緩やかに終了する。

is_websocket

my $is_websocket = $ws->is_websocket;

真。

local_address

my $local_address = $ws->local_address;

Mojo::Transactionlocal_addressのエイリアス。

local_port

my $local_port = $ws->local_port;

Mojo::Transactionlocal_portのエイリアス。

parse_frame

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]";

remote_address

my $remote_address = $ws->remote_address;

Mojo::Transactionremote_addressのエイリアス。

remote_port

my $remote_port = $ws->remote_port;

Mojo::Transactionremote_portのエイリアス。

req

my $req = $ws->req;

Mojo::Transactionreqのエイリアス。

res

my $req = $ws->res;

Mojo::Transactionresのエイリアス。

resume

$ws = $ws->resume;

Mojo::Transactionresumeのエイリアス。

send

$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!']);

server_handshake

$ws = $ws->server_handshake;

WebSocketのハンドシェイク。

server_read

$ws = $ws->server_read($data);

生のWebSocketのデータを読み込みます。

server_write

my $chunk = $ws->server_write;

書き込むための生のWebSocketのデータ。

デバッグ

MOJO_WEBSOCKET_DEBUG環境変数を設定すれば、さらなる詳細な情報をSTDERR に出力することができます。

MOJO_WEBSOCKET_DEBUG=1

参考

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

(2012/6/1更新)

Clone this wiki locally