157 lines
3.0 KiB
Perl
157 lines
3.0 KiB
Perl
|
package Protocol::WebSocket;
|
||
|
|
||
|
use strict;
|
||
|
use warnings;
|
||
|
|
||
|
our $VERSION = '0.26';
|
||
|
|
||
|
use Protocol::WebSocket::Frame;
|
||
|
use Protocol::WebSocket::Handshake::Client;
|
||
|
use Protocol::WebSocket::Handshake::Server;
|
||
|
use Protocol::WebSocket::URL;
|
||
|
|
||
|
1;
|
||
|
__END__
|
||
|
|
||
|
=encoding UTF-8
|
||
|
|
||
|
=head1 NAME
|
||
|
|
||
|
Protocol::WebSocket - WebSocket protocol
|
||
|
|
||
|
=head1 SYNOPSIS
|
||
|
|
||
|
# Server side
|
||
|
my $hs = Protocol::WebSocket::Handshake::Server->new;
|
||
|
|
||
|
$hs->parse('some data from the client');
|
||
|
|
||
|
$hs->is_done; # tells us when handshake is done
|
||
|
|
||
|
my $frame = $hs->build_frame;
|
||
|
|
||
|
$frame->append('some data from the client');
|
||
|
|
||
|
while (defined(my $message = $frame->next)) {
|
||
|
if ($frame->is_close) {
|
||
|
|
||
|
# Send close frame back
|
||
|
send(
|
||
|
$hs->build_frame(
|
||
|
type => 'close',
|
||
|
version => $version
|
||
|
)->to_bytes
|
||
|
);
|
||
|
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
# We got a message!
|
||
|
}
|
||
|
|
||
|
=head1 DESCRIPTION
|
||
|
|
||
|
Client/server WebSocket message and frame parser/constructor. This module does
|
||
|
not provide a WebSocket server or client, but is made for using in http servers
|
||
|
or clients to provide WebSocket support.
|
||
|
|
||
|
L<Protocol::WebSocket> supports the following WebSocket protocol versions:
|
||
|
|
||
|
draft-ietf-hybi-17 (latest)
|
||
|
draft-ietf-hybi-10
|
||
|
draft-ietf-hybi-00 (with HAProxy support)
|
||
|
draft-hixie-75
|
||
|
|
||
|
By default the latest version is used. The WebSocket version is detected
|
||
|
automatically on the server side. On the client side you have set a C<version>
|
||
|
attribute to an appropriate value.
|
||
|
|
||
|
L<Protocol::WebSocket> itself does not contain any code and cannot be used
|
||
|
directly. Instead the following modules should be used:
|
||
|
|
||
|
=head2 High-level modules
|
||
|
|
||
|
=head3 L<Protocol::WebSocket::Server>
|
||
|
|
||
|
Server helper class.
|
||
|
|
||
|
=head3 L<Protocol::WebSocket::Client>
|
||
|
|
||
|
Client helper class.
|
||
|
|
||
|
=head2 Low-level modules
|
||
|
|
||
|
=head3 L<Protocol::WebSocket::Handshake::Server>
|
||
|
|
||
|
Server handshake parser and constructor.
|
||
|
|
||
|
=head3 L<Protocol::WebSocket::Handshake::Client>
|
||
|
|
||
|
Client handshake parser and constructor.
|
||
|
|
||
|
=head3 L<Protocol::WebSocket::Frame>
|
||
|
|
||
|
WebSocket frame parser and constructor.
|
||
|
|
||
|
=head3 L<Protocol::WebSocket::Request>
|
||
|
|
||
|
Low level WebSocket request parser and constructor.
|
||
|
|
||
|
=head3 L<Protocol::WebSocket::Response>
|
||
|
|
||
|
Low level WebSocket response parser and constructor.
|
||
|
|
||
|
=head3 L<Protocol::WebSocket::URL>
|
||
|
|
||
|
Low level WebSocket url parser and constructor.
|
||
|
|
||
|
=head1 EXAMPLES
|
||
|
|
||
|
For examples on how to use L<Protocol::WebSocket> with various event loops see
|
||
|
C<examples/> directory in the distribution.
|
||
|
|
||
|
=head1 CREDITS
|
||
|
|
||
|
In order of appearance:
|
||
|
|
||
|
Paul "LeoNerd" Evans
|
||
|
|
||
|
Jon Gentle
|
||
|
|
||
|
Lee Aylward
|
||
|
|
||
|
Chia-liang Kao
|
||
|
|
||
|
Atomer Ju
|
||
|
|
||
|
Chuck Bredestege
|
||
|
|
||
|
Matthew Lien (BlueT)
|
||
|
|
||
|
Joao Orui
|
||
|
|
||
|
Toshio Ito (debug-ito)
|
||
|
|
||
|
Neil Bowers
|
||
|
|
||
|
Michal Špaček
|
||
|
|
||
|
Graham Ollis
|
||
|
|
||
|
Anton Petrusevich
|
||
|
|
||
|
Eric Wastl
|
||
|
|
||
|
=head1 AUTHOR
|
||
|
|
||
|
Viacheslav Tykhanovskyi, C<vti@cpan.org>.
|
||
|
|
||
|
=head1 COPYRIGHT
|
||
|
|
||
|
Copyright (C) 2010-2018, Viacheslav Tykhanovskyi.
|
||
|
|
||
|
This program is free software, you can redistribute it and/or modify it under
|
||
|
the same terms as Perl 5.10.
|
||
|
|
||
|
=cut
|