Protocol::WebSocket

A WebSocket message parser/constructor. It is not a server and is not meant to be one. It can be used in any server, event loop etc.

Server handshake

my $h = Protocol::WebSocket::Handshake::Server->new;

# Parse client request
$h->parse(<<"EOF");
GET /demo HTTP/1.1
Upgrade: WebSocket
Connection: Upgrade
Host: example.com
Origin: http://example.com
Sec-WebSocket-Key1: 18x 6]8vM;54 *(5:  {   U1]8  z [  8
Sec-WebSocket-Key2: 1_ tx7X d  <  nw  334J702) 7]o}` 0

Tm[K T2u
EOF

$h->error;   # Check if there were any errors
$h->is_done; # Returns 1

# Create response
$h->to_string; # HTTP/1.1 101 WebSocket Protocol Handshake
               # Upgrade: WebSocket
               # Connection: Upgrade
               # Sec-WebSocket-Origin: http://example.com
               # Sec-WebSocket-Location: ws://example.com/demo
               #
               # fQJ,fN/4F4!~K~MH

Client handshake

my $h =
  Protocol::WebSocket::Handshake::Client->new(url => 'ws://example.com');

# Create request
$h->to_string; # GET /demo HTTP/1.1
               # Upgrade: WebSocket
               # Connection: Upgrade
               # Host: example.com
               # Origin: http://example.com
               # Sec-WebSocket-Key1: 18x 6]8vM;54 *(5:  {   U1]8  z [  8
               # Sec-WebSocket-Key2: 1_ tx7X d  <  nw  334J702) 7]o}` 0
               #
               # Tm[K T2u

# Parse server response
$h->parse(<<"EOF");
HTTP/1.1 101 WebSocket Protocol Handshake
Upgrade: WebSocket
Connection: Upgrade
Sec-WebSocket-Origin: http://example.com
Sec-WebSocket-Location: ws://example.com/demo

fQJ,fN/4F4!~K~MH
EOF

$h->error;   # Check if there were any errors
$h->is_done; # Returns 1

Parsing and constructing frames

# Create frame
my $frame = Protocol::WebSocket::Frame->new('123');
$frame->to_string; # \x00123\xff

# Parse frames
my $frame = Protocol::WebSocket::Frame->new;
$frame->append("123\x00foo\xff56\x00bar\xff789");
$f->next; # foo
$f->next; # bar

Other features

URL parsing