=head1 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. =head2 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 =head2 Client handshake my $h = Protocol::WebSocket::Handshake::Client->new; # 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 =head2 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 =head2 Other features =over 4 =item Cookie parsing =item URL parsing =back